我刚开始用c ++(来自java),我正在尝试做一些基本的练习。想法是要求除5以外的任何输入,如果用户输入5,显示消息,并且如果用户输入除了5次以外的任何内容,则显示另一个消息。这是代码:
void notFive () {
int count = 0;
while (count < 10) {
int input = 0;
cout << "Enter any number other than 5." << endl;
cin >> input;
if (input == 5)
break;
count++;
}
if (count == 10)
cout<<"You are more patient than I am, you win.";
else
cout << "You weren't supposed to enter 5!";
}
}
我的问题是所有这些代码都打印出来“输入5以外的任何数字” 10次,然后说“你更耐心,我赢了。”任何想法有什么不对?
如果你们想要我所有的代码(以确保我不只是一个白痴),这里是:
#include <iostream>
#include <stdio.h>
using namespace std;
class Hello {
public:
void notFive () {
int count = 0;
while (count < 10) {
int input = 0;
cout << "Enter any number other than 5." << endl;
if ( ! (cin >> input) ) {
cout << "std::cin is in a bad state! Aborting!" << endl;
return;
}
if (input == 5)
break;
count++;
}
if (count == 10)
cout<<"You are more patient than I am, you win.";
else
cout << "You weren't supposed to enter 5!";
}
}hello;
int main() {
Hello h;
h.notFive();
return 0;
}
答案 0 :(得分:2)
当我将notFive
更改为main
时,您的代码(在Visual Studio 2012中)非常适合我。您的问题必须在此代码之外(可能是因为cin
处于破坏状态,正如其他人所建议的那样)。
答案 1 :(得分:1)
更改此行:
cin >> input
对此:
if ( ! (cin >> input) ) {
cout << "std::cin is in a bad state! Aborting!" << endl;
return;
}
您描述的行为是在运行此代码之前,如果发生了错误发生在cin
上会发生什么。
修改强>
将相同的代码添加到cin
的早期使用中,以找出它进入错误状态的位置。
这种情况的一个例子是,如果代码尝试读取int
,并且用户输入了字母表中的字母。
您也可以致电cin.clear();
恢复cin
的工作状态。
答案 2 :(得分:0)
以下是我的评论:
fflush(stdin)
无效。 stdin
无法刷新。也,
这可能与cin
的输入不同。cin.fail
之后检查cin >> input
。如果我进入
信,你的输入声明将失败。答案 3 :(得分:-1)
当然应该是
if (input != 5)
break;
我认为你的逻辑是错误的。