C++ c++;验证输入不起作用

C++ c++;验证输入不起作用,c++,C++,我在下面写这段代码,一切正常,除了我键入多个字符时,它假定在不退出程序的情况下给出无效的输入,但当我写入多个以“Q”或“Q”开头的字符时,它将退出程序,我不希望我只想在键入“Q”或“Q”时退出 int main() { char grade; while(grade!='Q'&& grade!='q') { cout<<"\nEnter one grade Letter from the following"

我在下面写这段代码,一切正常,除了我键入多个字符时,它假定在不退出程序的情况下给出无效的输入,但当我写入多个以“Q”或“Q”开头的字符时,它将退出程序,我不希望我只想在键入“Q”或“Q”时退出

int main()
{
    char grade;

    while(grade!='Q'&& grade!='q') {

        cout<<"\nEnter one grade Letter from the following"
            <<" (A ,B,C,D or F) or Please or 'q' to quite: ";

        cin>>grade;
        if (cin.get() != '\n') // Look at the next character
            {

                cin.ignore(1000, '\n'); // Clear the input stream

                cout << "\nInvalid input !\n";
            }

        else if (grade != 'A' && grade != 'a'
                 &&  grade != 'B' && grade != 'b'
                 &&  grade != 'C' && grade != 'c'
                 &&  grade != 'D' && grade != 'd'
                 &&  grade != 'F' && grade != 'f'
                 &&  grade != 'Q' && grade != 'q'
                 ) {

            cout << "\nInvalid input !\n";

        }

        else if(grade =='A'||grade=='a')
            cout<<"Excellent"<<endl;
        else if(grade=='B'|| grade=='b')
            cout<<"Good"<<endl;
        else if(grade=='C' || grade=='c')
            cout<<"Fair"<<endl;
        else if (grade=='D' || grade=='d')
            cout<<"Poor"<<endl;
        else if (grade=='F' || grade=='f')
            cout<<"Failure"<<endl;
        //else

    }

    return 0;
}
intmain()
{
煤焦品位;
while(grade!='Q'&&grade!='Q'){

cout如果您不想只考虑输入的第一个字符,则不要读取单个字符,然后根据它进行所有决策。使用
std::getline()
将整行读取为
std::string
,然后检查其有效值


此外,您现有的代码具有未定义的行为,因为
grade
在首次使用之前未初始化。

Add
else如果(grade='Q'| | grade='Q')在代码的前3行中中断;
while(grade!='Q'&&grade!='Q'))
-您知道
等级
可能是
q
?。使用未初始化变量是未定义的行为使用
tolower()
,因此您不必同时检查大小写值。是的,使用tolower或toupper。您还可以使用switch语句来减少所有链接的“else if”此外,您可以测试strchr('ABCDFQ',toupper(grade))以查看输入是否有效。