如果我们在需要整数的 switch case 中输入一个字符会发生什么
what happens if we input a character in a switch case where an integer is required
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;
这是我尝试创建堆栈的代码
如果我在 switch case 中输入一个字符,我会得到一个无限的 while 循环 为什么会这样
如果 a
的类型是 char
.
,则 switch
然后根据其 ASCII value 评估字符
如果a
是一个int
,输入一个字符会将cin
流设置为失败状态(可以用cin.fail()
查询)。
请注意 a
的声明及其初始化方式是提供正确答案的基础,因此请让该声明在您的代码段中可见。
顺便说一句,如果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
都不会成功,错误状态会被清除,无论你在其中可能有什么垃圾,都会被丢弃,这样新的读取就不会重新读取同样的垃圾。
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;
这是我尝试创建堆栈的代码 如果我在 switch case 中输入一个字符,我会得到一个无限的 while 循环 为什么会这样
如果 a
的类型是 char
.
switch
然后根据其 ASCII value 评估字符
如果a
是一个int
,输入一个字符会将cin
流设置为失败状态(可以用cin.fail()
查询)。
请注意 a
的声明及其初始化方式是提供正确答案的基础,因此请让该声明在您的代码段中可见。
顺便说一句,如果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
都不会成功,错误状态会被清除,无论你在其中可能有什么垃圾,都会被丢弃,这样新的读取就不会重新读取同样的垃圾。