无论输入是否正确/不正确,循环都会运行

时间:2015-01-09 00:05:32

标签: c++

我正在使用这个程序,由于某种原因,while循环没有像我预期/预期的那样运行。

#include <iostream>
using namespace std;
int main() {

const int size = 5;
char answer_sheet[size] = {'B','D','A','A','C'}; //'A','B','A','C','D','B','C','D','A','D','C','C','B','D','A'};
char student_answer[size];

char answer;


for(int i=0;i<size;i++)
{
    cout << i+1 << ": ";
    cin >> answer;
    cout << endl;
    while(answer != 'A' || answer != 'B' || answer != 'C' || answer != 'D')
    {
        cout << "You must enter either A, B, C, or D" << endl;
        cout << i+1 << ": ";
        cin >> answer;
        cout << endl;

    }
    student_answer[i] = answer;

}

return 0;
}

我正在输入一个字母A,B,C或D,当我输入它时,我进入while循环的正确方式是在我不假设的情况下,除非我错误地输入字符。

我似乎无法弄清楚问题。

由于

4 个答案:

答案 0 :(得分:2)

对于answer != 'A' || answer != 'B'的任何值,

answer 始终为true。 您的意思是&&而不是||吗?

答案 1 :(得分:1)

您正在寻找的条件是

while(answer != 'A' && answer != 'B' && answer != 'C' && answer != 'D')

||应该和&amp;&amp;在每种情况下,你也不应该检查'C'或'D'

答案 2 :(得分:1)

你忘了C和D(可能是拼写错误):

while(answer != 'A' || answer != 'B' || answer != 'A' || answer != 'B')

也许你想要:

while (answer != 'A'
       && answer != 'B'
       && answer != 'C'
       && answer != 'D')
{
}

另一种方法:

const std::string allowable_answers = "ABCD";
//...
while (allowable_answers.find(answer) == std::string::npos)
{
   // answer is not in the allowable set.
}

答案 3 :(得分:0)

首先,为什么不使用do / while循环而不是while循环。其次,你有

while(answer != 'A' || answer != 'B' || answer != 'A' || answer != 'B')
{
    cout << "You must enter either A, B, C, or D" << endl;
    cout << i+1 << ": ";
    cin >> answer;
    cout << endl;

}

如果A,B,C,D不输入,程序是否应该循环?如果A,B,A,B不是答案,你可以循环。如果没有输入正确的答案,do / while循环将进入循环并继续循环