在 C++ while 循环中获得无限循环,为什么会发生这种情况?[已结束]

Getting infinite loop in C++ while-loop, why is this happening? [closed]

提问人:Rashad Malikov 提问时间:5/26/2023 最后编辑:Alan BirtlesRashad Malikov 更新时间:5/26/2023 访问量:114

问:


这个问题是由一个错别字或一个无法再重现的问题引起的。虽然类似的问题可能在这里成为主题,但这个问题的解决方式不太可能帮助未来的读者。

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,然后打印它们。 输入终止词“|”时退出程序。

这就是我想编程的,代码在输入非数字字符之前运行良好。甚至 '|' 也使它进入无限循环。我只想知道为什么?想不通

c++ while-loop 无限循环

评论

0赞 tadman 5/26/2023
我建议在代码中添加一些空间以使其更具可读性,例如if (val1 == '|' || val2 == '|')
0赞 Andreas Wenzel 5/26/2023
寻求调试帮助的问题通常应提供问题的最小可重现示例,其中包括函数和所有指令,以及重现问题所需的确切输入。这允许其他人通过简单地使用复制和粘贴来轻松测试您的程序。main#include
1赞 tadman 5/26/2023
您要求提供两个数字并测试...竖线字符?请记住,就机器而言,只有 124。'|'
0赞 tadman 5/26/2023
您尝试处理的输入格式是什么?从结构上讲,它只接受用空格分隔的数值,比如或,但没有其他。20 25 -1
0赞 Rashad Malikov 5/26/2023
问题出在输入中,我通过输入一个字符(对于 int 类型)来终止程序。所以我认为它也会在这里终止。

答:

3赞 Sam Varshavchik 5/26/2023 #1
cin >> val1 >> val2;

a 的重载期望在输入时读取整数。整数就是整数。它将是 0、1、-5 或 42。这些是整数。>>std::istream

该字符不是整数。|

我只想知道为什么?

因为当输入操作失败时,以这种方式,输入流被设置为失败状态。当输入流处于失败状态时,所有进一步尝试的格式化输入操作都会立即失败,而无需设置格式化输入操作的目标。

因此,输入时会留下不变的叶子,并且流处于失败状态。输入流保持失败状态,在循环的下一次迭代中也会发生同样的事情。|val1val2

这就是为什么你会得到一个无限循环。

if( val1=='|' || val2=='|' )

这条线没有做你认为它所做的事情。 并且是整数。字符也是一个整数,被解释为 ASCII 代码,因此这真正起到的作用是将 Ascii 字符的代码进行比较。但是,由于上述原因,输入不会为其 ASCII 代码设置值,因此无法以这种方式工作。它使输入流处于失败状态,期望读取一个实际的实数,如果你有相应的手指数,它将与你拥有的手指数相对应(或者在0或负数的情况下做空必要的数量,我想......val1val2val1val2||int>>>>int