C++ 循环重复而不再次提示用户?
我有我原来的长程序中的代码片段,虽然看起来很简单,但它不能正常工作!我对C++语言是全新的,但我知道java是实现它的方法(不管语法)。 简单地说,这应该要求用户输入回答以下乘法(5*5),但是,它还应该检查用户是否输入了错误的输入(不是数字),不断地询问用户一次又一次。。。不知怎的,它一直在运行而不需要新的输入 我希望得到的,不仅是一个答案,而且是这样一个错误的原因C++ 循环重复而不再次提示用户?,c++,int,C++,Int,我有我原来的长程序中的代码片段,虽然看起来很简单,但它不能正常工作!我对C++语言是全新的,但我知道java是实现它的方法(不管语法)。 简单地说,这应该要求用户输入回答以下乘法(5*5),但是,它还应该检查用户是否输入了错误的输入(不是数字),不断地询问用户一次又一次。。。不知怎的,它一直在运行而不需要新的输入 我希望得到的,不仅是一个答案,而且是这样一个错误的原因 int main() { int userAnswer; bool isValidAnswer = true; c
int main() {
int userAnswer;
bool isValidAnswer = true;
cout << 5 << " * " << 5 << " = ";
cin >> userAnswer;
cin.ignore();
do {
if (cin.fail()) { //user input is not an integer
cout << "Your answer is not valid! Please enter only a natural number: ";
cin >> userAnswer;
cin.ignore();
} else {
isValidAnswer = false;
}
} while (isValidAnswer);
return 0;
}
intmain(){
int用户应答;
bool isValidAnswer=true;
您需要在接受新输入之前清除错误状态。在再次尝试读取输入之前,先调用cin.clear()然后调用cin.ignore()
我会做类似的事情
cout << "Enter a number: ";
cin >> number;
while(cin.fail())
{
cin.clear();
cin.ignore(1000, '\n'); //some large number of character will stop at new line
cout << "Bad Number Try Again: ";
cin >> number;
}
cout>number;
while(cin.fail())
{
cin.clear();
cin.ignore(1000,“\n”);//将有大量字符停在新行
数量;
}
首先,cin.fail()不会充分检查您的答案是否是自然数,或者类型是否设置为int(也可能是负数)
其次,您的布尔值isValidAnswer
确实在检查它是否是无效答案
第三(也是最重要的),正如另一个答案所建议的,您应该输入cin.clear()以清除失败状态,然后输入cin.ignore(),这将从cin中删除失败的字符串
第四,cin将只检查字符串中是否存在int。您需要执行自己的字符串比较,以确定整个输入是否为int(请参阅下面基于答案的答案)
更新:
#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;
bool isNum(string line)
{
char* p;
strtol(line.c_str(), &p, 10);
return *p == 0;
}
int main() {
int userAnswer;
string input;
bool isInvalidAnswer = true;
cout << 5 << " * " << 5 << " = ";
while (isInvalidAnswer) {
if (!(cin >> input) || !isNum(input)) {
cout << "Answer is not a number! Please try again:\n";
cin.clear();
cin.ignore();
}
else {
userAnswer = atoi(input.c_str());
if (userAnswer < 0) { //user input is not an integer
cout << "Answer is not a natural number! Please try again:\n";
} else {
isInvalidAnswer = false;
}
}
}
cout << "Question answered!\n";
return 0;
}
#包括
#包括
#包括
使用名称空间std;
bool isNum(字符串行)
{
char*p;
strtol(line.c_str(),&p,10);
返回*p==0;
}
int main(){
int用户应答;
字符串输入;
bool-isInvalidAnswer=true;
我可以尝试使用cin.clear()吗,但没有任何更改。您的代码也有同样的问题!!它从不排除新的输入,我一直按enter键而不结束循环!哎呀。它实际上需要是cin.ignore(1000,“\n”);您需要告诉它忽略新行。什么失败()和clear()确实是这样做的,所以它导致了这样一个问题?fail是一种检查cin是否失败的方法。它返回一个布尔值。Clear清除错误状态,以便您可以继续使用流。当cin失败时,错误输入留在流中,因此在清除错误状态后,您需要忽略错误输入。如果我这样做123B会怎么样
,那么会发生什么?它是否会失败?