所以我要先说这是我的第一篇文章。我已经打了一个台阶,无法找到一个为我工作的简单答案。
我很新,我还在命令行程序上但是在这里我想创建一个程序来接受用户的int值。我想检查并确认它实际上是一个整数值。如果不是,我希望告诉用户输入正确的整数值。如果它是正确的我想继续前进。我想继续询问正确的输入,直到用户给我一个整数值。
这是我一直试图做的事情:
#include <iostream>
using namespace std;
int main()
{
int n;
do {
if (isdigit(n)==false) {
cout<<"Enter an integer number\n";
cin>>n;
continue;
}
else {
cout<<"Good Job\n";
}
} while(isdigit(n)==false);
}
你可能猜到这给了我一个无限循环。我不能因为我的生活而得到这样的表现我想要它。
答案 0 :(得分:3)
你走在正确的轨道上。您正在执行以确定已成功读取整数的检查不正确。 isdigit
用于检查单个字符是否为数字。 isdigit
返回true
的值范围为['0'
- '9'
]。用整数表示,该范围是[48-57]。它不适用于您的目的。
这是一个应该有效的更新版本:
#include <iostream>
using namespace std;
int main()
{
int n;
while ( true )
{
cout << "Enter an integer number\n";
if ( cin >> n )
{
cout<<"Good Job\n";
break;
}
else
{
// Clear the stream and ignore the rest of the line.
cin.clear();
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
}
}
答案 1 :(得分:2)
这里有几个问题。
首先,当@ jrd1已关联时,您投射cin>>n
的方式不完整。您的程序功能似乎需要某种验证,但如果输入不是数字,则cin
会失败(请参阅integer input validation, how?和Integer validation for input中使用cin.fail()
)。您必须检查cin
是否失败,并为下一轮输入刷新cin
。
您的if
声明和while
声明之一是多余的,因为n
在while
和if
的评估之间没有变化后续循环。
由于您必须检查cin
是否失败,因此无需另外检查isdigit(n)
。也就是说,如果cin
没有失败,那么n
必须是数字。
您的continue
声明是多余的。 continue
跳到循环的末尾,但这不是必需的,因为所有剩余的代码都在else
块中,因此没有什么可以跳过。这仅在您想要在if
块(您的代码没有)之后跳过任何代码时才有用。
您对else
块的意图似乎表示验证成功。您可以考虑使用break
语句,该语句会破坏当前循环中的代码执行。
一旦你考虑了所有这些,你就会得到类似@ R-Sahu的代码。
这是一个与您的代码最相似的示例:
#include <iostream>
using namespace std;
int main() {
int n;
do {
cout<<"Enter an integer number\n";
cin>>n;
if(cin.fail()) {
cout << "Wrong Input" <<endl;
cin.clear();
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
} else {
break;
}
} while (true);
cout<<"Good Job\n"<<endl;
}
这是另一个“更多”简化的示例,并且不需要break
或continue
语句(某些程序员可以选择更好的“可读”代码)
#include <iostream>
using namespace std;
int main() {
int n;
cout << "Enter an integer number\n" << endl;
cin>>n;
while ( cin.fail()){
cout << "Wrong Input. Enter an integer number\n" <<endl;
cin.clear();
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
cin>>n;
}
cout<<"Good Job\n"<<endl;
}
编辑:修复了第二个示例中! cin>>n
未按预期运行的问题。
EDIT2:解决了第一个示例中isdigit
未正确应用的问题。见R Sahu的解释。
答案 2 :(得分:0)
感谢所有帮助人员,我终于能够使用ch41rmn建议的略微修改版本来运行代码。 “简化”版本直接绕过while循环。即使给出了正确的int值,第二个也没有退出。这是我用过的:
#include <iostream>
using namespace std;
int main() {
int n;
do {
cout<<"Enter an integer number\n";
cin>>n;
if(cin.fail()) {
cout << "Wrong Input" <<endl;
cin.clear();
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
else{
break;
}
} while(isdigit(n)==false);
cout<<"Good Job\n";
}
虽然这可能是多余的,但我很高兴SOB运行。
谢谢!