为什么c++中的while循环无法正确运行
Why my while loop in c++ wont run correctly?
我只是一个编程新手,我试图编写一个while循环,只要输入(num
)不是以零结尾的整数,它就会运行。当我输入一个以零结尾的数字时,程序会正确地运行循环,但当我输入一些无意义的东西,如rofl
时,程序只打印The input is not valid.
,不会重复循环。我试着寻找解决方案,但一个小时后我还是被卡住了。有人能帮我吗?太多了!
void rev_sum() {
int num;
int a = 1;
while (a < 2) {
cout << "Please input a natural number without zero at the end:n";
cin >> num;
if (!cin) {
cout << "The input is not valid.n";
cin.clear();
cin.ignore(INT_MAX);
}
if (num % 10 == 0) {
cout << "The number cannot have zero at the endn";
} else {
cout << "gjn";
break;
}
}
}
尝试更换
cin.ignore(INT_MAX);
带
cin.ignore(numeric_limits<streamsize>::max(), 'n');
并更改
if (num % 10 == 0)
至
else if (num % 10 == 0)
您的最终代码应该是这样的:
void rev_sum() {
int num;
int a = 1;
while (a < 2) {
cout << "Please input a natural number without zero at the end:n";
cin >> num;
if (!cin) {
cout << "The input is not valid.n";
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), 'n');
}
else if (num % 10 == 0) {
cout << "The number cannot have zero at the endn";
} else {
cout << "gjn";
break;
}
}
}
if (num % 10 == 0) {
可能是
else if (num % 10 == 0) {
否则,其他情况可能会被执行
在循环开始时设置a = 1
,然后从不更改a
,这意味着离开while循环的唯一方法是命中break语句。如果你的循环没有循环,那么它一定被卡住了。我不熟悉if (!cin)
和cin.ignore(...)
这两个语句,所以它们是需要检查(或更改)的首要问题。语句cin >> num;
无论键入什么都会完成,因此当您输入"rofl"时,您可以检查"num"等于什么。然后在它失败后,您仍然使用num
,所以您正在处理这个无意的条目。您可以在cin.ignore(...)
之后添加continue;
,跳回while循环的顶部并再次提问。你也可以在while循环后打印一些东西,以便知道你什么时候出来。
尽管如此,我永远不会相信用户会输入可接受的信息,也永远不会相信cin会为我处理它。就我个人而言,我会使用cin.getline(buffer,buffer_size)将cin读取为字符串;然后我会向用户抱怨,如果他们填充了缓冲区,或者给了我一些不是整数的东西(你可以用scanf()这样的函数来检查)。然后你可以准确地吐出他们给你的东西,你可以具体地说出你的投诉。
如果输入有效,只检查数字是否以0结尾是否更有意义。。。。
void rev_sum() {
int num;
int a = 1;
while (a < 2) {
cout << "Please input a natural number without zero at the end:n";
cin >> num;
if (!cin) {
cout << "The input is not valid.n";
cin.clear();
cin.ignore(INT_MAX);
} else {
if (num % 10 == 0) {
cout << "The number cannot have zero at the endn";
} else {
cout << "gjn";
break;
}
}
}
}
cin.ignore(numeric_limits<streamsize>::max())
- 循环无限运行C++解决骑士之旅问题
- 我的代码运行良好,但在游戏循环中中断
- 如何根据用户在C++中的输入运行不同数量的 for 循环
- 我可以根据用户输入在运行时生成"循环"吗?
- 重新启动后,线程无法在 while 循环中再次运行
- 运行无限循环的最小二叉树问题
- 目标C++,如何在后台线程中使用运行循环?
- 如何在指定的时间内运行循环
- 苹果运行循环的回调方法
- 我怎样才能一直运行循环,直到按下键 (C++)
- 如何在C++中每次运行循环时将变量递增1`
- 如何在第一次运行循环时忽略代码的特定部分
- 如何在每次运行循环时更改for循环中的对象
- 应用程序在访问主运行循环时崩溃 (SIGABRT)
- osX :运行循环选项(创建事件点击时)
- 线程如何运行循环直到连接
- 在指定时间运行c++循环
- 在运行循环外声明、分配和释放线程局部指针变量
- 这是在c++中运行循环的有效方式吗?
- 如何在qt中使用gui对象名运行循环