提问人:Rashad Malikov 提问时间:5/26/2023 最后编辑:Alan BirtlesRashad Malikov 更新时间:5/26/2023 访问量:114
在 C++ while 循环中获得无限循环,为什么会发生这种情况?[已结束]
Getting infinite loop in C++ while-loop, why is this happening? [closed]
问:
这个问题是由一个错别字或一个无法再重现的问题引起的。虽然类似的问题可能在这里成为主题,但这个问题的解决方式不太可能帮助未来的读者。
6个月前关闭。
社区在 6 个月前审查了是否重新讨论这个问题,并将其关闭:
原始关闭原因未解决
#include<iostream>
using namespace std;
int main()
{
int val1=0, val2=0;
bool a=true;
while(a)
{
cout << "Enter 2 numbers: " << endl;
cin >> val1 >> val2;
if( val1=='|' || val2=='|' ) a=false; //terminate loop
else cout << val1 << " " << val2 << endl;
}
}
编写一个由 while-loop 组成的程序,该循环(每次围绕循环)读取两个 int,然后打印它们。 输入终止词“|”时退出程序。
这就是我想编程的,代码在输入非数字字符之前运行良好。甚至 '|' 也使它进入无限循环。我只想知道为什么?想不通
答:
cin >> val1 >> val2;
a 的重载期望在输入时读取整数。整数就是整数。它将是 0、1、-5 或 42。这些是整数。>>
std::istream
该字符不是整数。|
我只想知道为什么?
因为当输入操作失败时,以这种方式,输入流被设置为失败状态。当输入流处于失败状态时,所有进一步尝试的格式化输入操作都会立即失败,而无需设置格式化输入操作的目标。
因此,输入时会留下不变的叶子,并且流处于失败状态。输入流保持失败状态,在循环的下一次迭代中也会发生同样的事情。|
val1
val2
这就是为什么你会得到一个无限循环。
if( val1=='|' || val2=='|' )
这条线没有做你认为它所做的事情。 并且是整数。字符也是一个整数,被解释为 ASCII 代码,因此这真正起到的作用是将 Ascii 字符的代码进行比较。但是,由于上述原因,输入不会为其 ASCII 代码设置值,因此无法以这种方式工作。它使输入流处于失败状态,期望读取一个实际的实数,如果你有相应的手指数,它将与你拥有的手指数相对应(或者在0或负数的情况下做空必要的数量,我想......val1
val2
val1
val2
|
|
int
>>
>>
int
上一个:从排序的链表中删除重复项
评论
if (val1 == '|' || val2 == '|')
main
#include
'|'
20 2
5 -1