配列要素を比較しようとしていますが、コンパイルすると、クラスメンバー配列には、メインの「キー」の元の配列から配列にコピーした値が表示されませんが、メインの「回答」の配列は保持されます入力した値と、プログラムの実行後にテストループを書き、クラスメンバー配列「canswers」の内容を確認しました。これは、メインの「キー」から配列にコピーした実際の変数です。クラス関数「grade」で 2 つの配列 (「canswers」と「answer」) を比較しようとしていますが、何が間違っているのかわかりません。 if 文では動作せず、ランダムな文字が表示されます。クラスメンバー配列「canswers」の内容を表示するために、配列の最後にテストループを書きました。これには、メインからコピーした正しい値がすべて含まれていますが、比較すると表示も機能もしません2。皆さんが簡単に読めるように、コードをできるだけきれいに保つようにしました。
#include<iostream>
#include<string>
using namespace std;
class TestGrade
{
public:
void setKey(char []);
void grade(char []);
char canswers[];
void display();
};
void TestGrade::setKey(char answers[]) //setting values from "key" array in main
{
for(int index = 0; index < 19; index++)
{
canswers[index] = answers[index];
}
}
void TestGrade::grade(char answer[]) //comparing elements in array, here's where the
{ //trouble begins
for(int index = 0; index < 19; index++)
{
cout << canswers[index] << " " << answer[index] << endl;
if(canswers[index] == answer[index])
{ cout << "The values are equal" << endl;}
}
}
void TestGrade::display() //testing the values after the loop i had trouble with
{
for(int index = 0; index < 19;index++)
{
cout << canswers[index] << endl;
}
}
int main()
{
const char SIZE = 20;
char answer[SIZE];
char key[20] = {'B', 'D', 'A', 'A',
'C', 'A', 'B', 'A',
'C', 'D', 'B', 'C',
'D', 'A', 'D', 'C',
'C', 'B', 'D', 'A'};
TestGrade test1,test2;
test1.setKey(key);
cout << "Welcome to the written portion of the DMV exam. \n";
cout << "You may only enter capital A, B, C, or D for your answers.\n\n" << endl;
for (int index = 0; index < SIZE; index++)
{
cout << "Enter your answer for question " << index+1 << endl;
cin >> answer[index];
while (answer[index] != 'A'
&& answer[index] != 'B'
&& answer[index] != 'C'
&& answer[index] != 'D')
{
cout << "ERROR: you must input capital A,B,C, or D" << endl;
cin >> answer[index];
}
}
test2.grade(answer); // comparing the values of canswer[] and answer[]
test1.display(); //test loop testing contents of canswers[] class member array
system("pause");
return 0;
}