接受类型char的输入的问题
Issue accepting input of type char
我正在尝试一个简单的程序。当输入为y或y或n或n时,这可以正常工作。但是,如果我以yy或yy的形式输入输入,则其行为不同。你能解释为什么吗?当输入是nn或nn时,不会发生同样的事情。-我是编程的新手,因此请帮助我
void main()
{
char ch = 'y';
int choice;
do {
cout << "Enter a number :";
cin >> choice;
cout << "do you want to continue :";
cin >> ch;
} while ((ch == 'y') || (ch == 'Y'));
}
您的输入:YY
cin>>choice;
试图读取整数,但失败。设置了错误标志,使cin
无法使用。
它已经处于失败状态,您尝试阅读角色。它忽略了你。由于您已将ch
初始化为Y
(并且cin
没有修改ch
,因为它处于失败状态),这将不断发生。
如果要在错误后再次使用cin
,则需要使用cin.clear()
清除错误位。请注意,cin.clear()
重置错误位,但不会将流指针移动到前方。这意味着在使用cin.clear()
之后,您仍处于第一个Y
。
如果您在cin>>choice;
之后添加cin.clear()
,则cin
错误将被重置(如果有的话),并且将让cin
继续进行。如前所述,流指针仍将指向第一个字符,因此cin>>ch;
最终会读取第一个字符。此过程重复,cin>>choice;
将再次失败,cin>>ch;
最终将读取最后一个Y
。现在,cin>>choice
将尝试阅读一些内容,但它意识到它已达到输入的末端(又称文件末端; eof)。这将再次设置错误位。您清除了错误位,让cin>>ch;
读取一些内容,但这也失败了,因为您已经达到了终点。由于ch
先前具有" Y"或" Y"(因为您处于当前迭代中,这意味着该条件得到了满足),因此它将继续保持原样。您最终再次获得无限循环。
修复程序是将ch
设置为顶部的循环内部的'n',以便在错误时循环断开。可选地,您可以在使用cin.clear()
后立即使用cin.ignore();
忽略错误输入(cin>>choice;
的字符)。
void main(){
char ch;
int choice;
do{
ch='n'; //assume no unless told
cout<<"Enter a number :";
cin.clear();
cin>>choice;
cout<<"do you want to continue :";
cin>>ch;
}while((ch=='y')||(ch=='Y'));
}
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 编写时C++中的输入重定向问题
- 输入std::数组时出现问题
- 我试图制作一个程序,要求用户输入问题和答案,但程序循环不正确
- 打印时有二叉树问题.用户输入不打印任何内容
- 用户输入字符串的文件附加问题..C++
- 函数以相反的顺序输出输入问题,并改进算法以解释相等的数字
- 每当调试C (Xcode 10.1)时,输入问题
- iostream输入问题
- 井字输入问题
- 多个玩家的键盘输入问题
- 字符输入问题
- 使用 getline() 的字符串输入问题
- 如何在我的C++测验中输入问题
- GLFW操纵杆输入问题
- 在Bison中为$$输入问题
- c++内存/输入问题
- C++ 拆分输入问题
- c++文件输入问题
- 基本c++输入问题