do{
cout<<"Enter the task to perform \n";
cout<<"1. push an element \n";
cout<<"2. pop an element \n";
cout<<"3. peep the elements \n";
cout<<"4. retain odd elements \n";
cout<<"5. remove till element n \n";
cout<<"6. Display the elements \n";
cout<<"7. exit \n";
cin>>a;
switch(a){
case 1:
.
.
.
.
case 2:
case 7:
return 1;
default:
cout<<"Crap entry Reenter \n\n\n\n\n";
}
}while(a != 7);
return 0;
这是我试图制作堆栈的代码 如果我在开关盒中输入一个字符,我会得到一个无限的while循环为什么它如此
答案 0 :(得分:1)
如果switch
的类型为a
,则char
会根据ASCII value对字符进行评估。
如果a
是int
,则输入字符会将cin
流设置为失败状态(可以使用cin.fail()
查询)。
答案 1 :(得分:0)
请注意 a
的声明及其初始化方式为FUNDAMENTAL以提供正确答案,因此请在您的代码段中显示该声明。
顺便说一下,如果a
是一个整数,并且在cin
中有些东西无法作为int读取,cin>>a
会失败,cin会被阻止(所以任何进一步的读取都会失败),值未读。
因此a
将保留其旧值(并且可能不会7
,因此不会return
完成)并且永远不会更改。
确保阅读的正确方法可以是使用,而不是cin>>a
,
while(!(cin>>a))
{
cout << "bad input: re-enter" << std::endl;
cin.cler();
cin.ignore(numeric_limits<streamsize>::max(),'\n');
}
换句话说,直到cin>>a
不成功,错误状态才会被清除,并且你可能会把它丢弃,丢弃,以便新的读取不会重新读取相同的垃圾。