3

问题:while当用户输入时无法开始循环y

我花了几个小时搜索包括 Stack Overflow 在内的所有论坛以寻找线索,并试图弄清楚这一点(自学 C++)。根据我读过的内容,我已经尝试过:一个do循环在开始时有效,但它通过将先前numb的条目乘以下一个条目的阶乘来错误地计算(冲洗问题?),我尝试break了它并停止计算,但它也停止而不到达 cout < <“再做一个?”。我还尝试在语句和 if 语句周围添加/移动大括号(绝望地)。

//problem #6 page 127 Robert Lafore OOP Prg C++ 4th ed.
#include <iostream>
using namespace std;
int main()
{
    unsigned int numb;
    unsigned long fact = 1;  //long for larger numbers
    char ch;

    cout << "Enter a number  ";
    cin >> numb;

    for (int j = numb; j > 0; j--) //multiply 1 by
    {
        fact *= j;
        cout << "Factorial is "<< fact << endl;
        cout << "Do another? (y/n)\n";
        cin >> ch;
    }

    while(ch !='n');  
    return 0;
}
4

3 回答 3

4

您的逻辑不太正确 - 您需要执行一次操作,然后询问并重做整个操作。

现在,您为您的操作执行一个循环,然后在每次循环迭代for时获取用户键入的字符,然后启动一个永不终止的循环。while

do/while是一个很好的候选人:

do
{
    fact = 1; // Reinitialize for subsequent loops
    cout << "Enter a number  ";
    cin >> numb;

    for(int j = numb; j > 0; j--) //multiply 1 by
    {
        fact *= j;
    }

    cout << "Factorial is " << fact << endl;
    cout << "Do another? (y/n)\n";
    cin >> ch;
 }
 while (ch == 'y');  // Switched to make anything other than 'y' break out
于 2013-08-15T22:45:54.590 回答
1

你需要这样做:

do
{
    for(int j=numb; j>0; j--) //multiply 1 by
    {
        fact *=j;
    }
    cout <<"Factorial is "<< fact<<endl;
    cout <<"Do another? (y/n)\n";
    cin >> ch;
}
while (ch != 'n');

怎么了:

您的代码进入for循环:

for(int j=numb; j>0; j--)

它计算阶乘……但是执行另一个阶乘的代码在for循环中!你的程序流程是这样的:

  • 进入for循环
    • 乘以并将值存储factjfact
    • 打印值fact
    • 要求做另一个
      • 将值存储在ch
    • 继续for循环

看到问题了吗?您被要求为循环的每次迭代再做一次for。然后,while循环执行此操作:

  • 循环 whilech不等于'n'.

但是......循环是无限的!在for循环的最后一次迭代之后,ch不会改变。所以,如果最后一个值是'y',那么while循环会继续循环......一遍又一遍......一遍一遍......因为它没有主体,它只会永远持续下去。

于 2013-08-15T23:08:42.960 回答
0

你有一些正确的代码位,但代码位在错误的地方。

  1. 将“做另一个”的输出和输入移到 for 循环之后。
  2. do {在前面添加cout << "enter a number;`
  3. 添加 '} beforewhile(ch != 'n');`

现在,当chis not时,您有一个永远循环,因为实际循环内部'n'没有任何变化。ch

于 2013-08-15T22:48:25.040 回答