C++ c++;验证输入不起作用
我在下面写这段代码,一切正常,除了我键入多个字符时,它假定在不退出程序的情况下给出无效的输入,但当我写入多个以“Q”或“Q”开头的字符时,它将退出程序,我不希望我只想在键入“Q”或“Q”时退出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"
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
在首次使用之前未初始化。Addelse如果(grade='Q'| | grade='Q')在代码的前3行中中断;
while(grade!='Q'&&grade!='Q'))
-您知道等级
可能是q
?。使用未初始化变量是未定义的行为使用tolower()
,因此您不必同时检查大小写值。是的,使用tolower或toupper。您还可以使用switch语句来减少所有链接的“else if”此外,您可以测试strchr('ABCDFQ',toupper(grade))以查看输入是否有效。