0

在这段代码中,我似乎找不到一个以上会导致无限循环的错误。任何人都可以为我找到这些错误提供的任何帮助将不胜感激。非常感谢大家。

#include <iostream>
#include <iomanip>
#include <cmath>
#include <fstream>
using namespace std;

void Increment(int);
int main ()
{
    int count = 1;
    while (count < 10)
    cout << " The Number After " << count; 
    Increment(count);
    cout << " is "<< count << endl;
    return 0;

}

void Increment (int nextNumber)
{
    nextNumber++;
}
4

2 回答 2

4
#include <iostream>
#include <iomanip>
#include <cmath>
#include <fstream>
using namespace std;

void Increment(int);

int main ()
{
    int count = 1;
    while (count < 10)

第一个错误在这里 - 你忘记了大括号 { } (这使得多个语句被视为一个语句)。这意味着 while 循环仅包含下一行(下一条语句)。

    cout << " The Number After " << count; 

所以这行被执行了,然后到了while体,看到条件为真就执行了这行……直到时间结束。

    Increment(count);

第二个错误在这里:

void Increment (int nextNumber)
{
    nextNumber++;
}

增量是在nextNumber 的本地副本上完成的,例如nextNumber 已按值传递。一些解决方案是

1)返回数字的递增版本,并使用return。(如果你这样做,要小心,因为打字return nextNumber++会返回原始值,但return ++nextNumber会返回下一个值 - 阅读前增量和后增量)

2) 传递一个指向 Increment 的指针,并通过取消引用指针来编辑原始整数。

3)传递对增量的引用,然后当您编辑整数时,它会通过引用进行编辑,并且原始副本也会更改。

(当然,如果你让它不是一个函数,它也可以正常工作)

    cout << " is "<< count << endl;
    return 0;

}

我没有看到第三个错误。

于 2013-06-05T00:43:38.783 回答
3
while (count < 10)
    cout << " The Number After " << count; 
    Increment(count);
    cout << " is "<< count << endl;

这是该行的功能解析方式:

while (count < 10)
    cout << " The Number After " << count; 
Increment(count);
cout << " is "<< count << endl;

也就是说,只有第一个打印语句正在运行。并且由于该行上没有循环终止符,因此遇到了无限循环。我建议避免混淆,尽可能使用块:

while (count < 10)
{
    cout << " The Number After " << count; 
    Increment(count);
    cout << " is "<< count << endl;
}

另一个问题是Increment仅对参数的副本进行操作。使用引用,以便我们可以为参数使用别名:

void Increment(int& nextNumber)
{
    nextNumber++;
}
于 2013-06-05T00:42:38.980 回答