循环时非终止
Non-terminating while loop
我只是想知道一些事情。我有以下代码:
#include <iostream>
using namespace std;
int main()
{
int number, largest, counter = 1;
while (counter <= 10)
{
cout << "Enter a number: ";
cin >> number;
if (counter = 1)
{
largest = number;
}
else if (number > largest)
{
largest = number;
}
counter++;
}
cout << "nnThe largest number is: " << largest;
system("pause");
return 0;
}
问题是,它永远不会终止。我确实设法通过稍微修改代码来解决问题,但我想知道为什么会发生这种情况。这是固定代码:
#include <iostream>
using namespace std;
int main()
{
int number, largest, counter = 1;
cout << "Enter a number: ";
cin >> number;
largest = number;
while (counter < 10)
{
cout << "Enter a number: ";
cin >> number;
if (number > largest)
{
largest = number;
}
counter++;
}
cout << "nnThe largest number is: " << largest << endl;
system("pause");
return 0;
}
似乎在删除 else if 语句后它起作用了。发生了什么事?
if (counter = 1)
这应该是
if (counter == 1)
否则,每次迭代时,您将计数器重置为 1。
if (counter = 1)
重新分配 1 来对抗每个循环,这总是< 10
。
你想要if (counter == 1)
.
一个常见的错误:
if( counter = 1) // assignment operator
这会将 counter
的值设置为每次迭代时1
,并且循环永远不会完成。
你应该使用
if( counter == 1) // equality operator
^^^^
这正是你的意思
if (counter = 1)
这不会比较counter
和1
,它将1
分配给counter
然后检查counter
- 我们刚刚设置为1
,因此它将始终是积极的并且始终是<= 10
的。
行
if (counter = 1)
应该是
if (counter == 1)
因为你想比较,而不是分配值。
你的第一个例子有
if (counter = 1)
而不是
if (counter == 1)
因此,if 语句会在每次迭代期间将计数器重置为 1。
你的问题在这里:
if (counter = 1)
分配而不是比较。使用更高的警告级别进行编译。
if (counter = 1)
因此,counter
值永远是 1。
你分配 1 来计数器而不是比较它,使用 == 而不是 =
请注意,这是一个常见的错误。您可以通过键入来避免它
if( 1 == counter )
而不是
if( counter == 1 )
因为
if( 1 = counter )
不会编译(如果您犯了错误并忘记了"="(。
相关文章:
- while 循环不以哨兵值终止
- 在这个无限循环中,当输入 0 时终止,当输入 int 范围之外的任何内容时,程序行为不正常
- C++ 即使不满足条件,循环也会终止
- 为什么 EOF 在循环扫描期间没有终止?
- 对于检查 >=0 终止条件时的循环索引类型
- 程序在终止循环后不接收输入
- 即使我尝试递减 t,While 循环也没有终止
- 如何修复不会在退出选择时终止的 do-while 循环
- 如何用字符终止整数输入循环?
- 读入变量时循环终止,'Range_error' on C++
- 当我输入非整数值时,我的二次方程代码终止,如何让它正确循环?
- 如何正确终止此循环?
- 多个查询的循环过早终止
- 程序终止,状态为 -1073741510 在 for 循环的中间,将输入分配给二维数组
- 终止具有特定字符的循环
- 程序终止,而不是继续整数输入验证循环
- 程序似乎在 for 循环 - C++后静默终止
- 循环终止不正确时
- C :终止循环的最优雅方法,该循环在字符串向量上迭代
- 如果未检测到alpha,则终止循环