int gas;
// Input Code
int user_code;
std::cout << std::endl;
std::cout << "Please enter the Code: ";
std::cin >> user_code;
std::cout << "The value you entered is " << user_code;
std::cout << std::endl;
int array1[16] = { 42011, 42017, 42029, 42045,
42091, 42101, 34001, 34005,
34007, 34009, 34011, 34015,
34033, 10001, 10003, 24015 }; // 0.2387 (23.87%)
int array2[45] = { 11001, 24003, 24510, 24005, 24009,
24013, 24017, 24019, 24021, 24025,
24027, 24029, 24031, 24033, 24035,
24037, 24041, 24043, 51510, 51013,
51043, 51047, 51600, 51059, 51610,
51061, 51069, 51630, 51099, 51107,
51683, 51685, 51153, 51157, 51177,
51179, 51187, 51840, 54003, 54027,
54037, 54065, 42001, 42055, 42133 }; //0.2710 (27.10%)
int * array1_search;
array1_search = std::find(array1, array1+ 16, user_code);
int * array2_search;
array2_search = std::find(array2, array2 + 45, user_code);
if (array1_search != array1+ 16) {
std::cout << "Codefound in Array1: " << *array1_search << '\n';
gas= 0.2387;
}
else if (array2_search != array2_search + 45) {
std::cout << "Code found in Array2: " << *array2_search << '\n';
gas= 0.2710;
}
else {
std::cout << "Not found \n";
gas= 0.1506;
}
上記は現在のコードです。私はユーザーに変数user_codeの値を入力させ、次に2つの配列array1 [16]とarray2 [45]を反復しようとしています。ユーザーの入力値が最初の配列1にある場合、私は0.2387のガスを割り当てたいと思います。入力値が他の配列にある場合は、私は0.2710のガスを割り当てたいと思います。C++数値の配列を検索しても、else文が見つからない場合はelse文をトリガーしない
基本的には、ユーザーの入力がどの配列に含まれているかに応じて値を割り当てたいと思っています。私はC++を非常に新しくしています。
array1またはarray2内の数値を入力し、array1またはarray2にある数字を正しく識別すると正常に動作しているようです。問題は、いずれかの配列内にないことがわかっている数値を入力すると、else文がトリガーされ、array2にあると識別されます。たとえば、user_codeとして12345と入力すると、「Code found in Array2:0」と表示されます。私は12345がarray2に含まれていないことを知っています。なぜ* array2_searchが0に割り当てられているのか分かりません。この問題を解決するにはどうすればよいですか?user1がarray1またはarray2に含まれていない場合、
「int」変数には分数がありません。毎回 'gas'に' 0'を割り当てています。 – Barmar
「16」や「45」のような数字をあちこちにハードコードしないでください。名前付き定数を宣言します。 – Barmar
'if(array1_search!= array1 + 16){' - if(array1_search!= std :: end(array1)) 'を使用してください。また、値として「45」などの数字を使用して間違いを犯すことは非常に簡単です。もしあなたが '44'のエントリを持っていて、あなたがミスカウントして45のエントリがあると思ったらどうなりますか?あなたのコードはまだコンパイルされますが、間違った結果に終わるでしょう。代わりにコンパイラにカウントをさせてください。つまり、 'int array2 [] = {whatever};' – PaulMcKenzie