虽然不会在 y/n 输入C++后启动循环

While won't start loop after y/n input C++

本文关键字:C++ 输入 启动 循环      更新时间:2023-10-16

问题:当用户输入y时,while无法启动循环。

我花了几个小时在包括Stack Overflow在内的所有论坛上搜索线索,并试图弄清楚这一点(我自己学习C++)。根据我所读到的内容,我尝试过:do循环在开始时工作,但它通过将前一个numb条目乘以下一个条目阶乘来错误地计算(刷新问题?),我尝试了break,它停止了计算,但它也停止了,没有到达cout<lt;"再来一次?"。我还尝试在语句和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;
}

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

现在,您为操作执行一个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

您需要这样做:

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循环
    • fact乘以j,并将值存储在fact
    • 打印fact的值
    • 要求再做一次
      • 将值存储在ch
    • 继续for循环

看到问题了吗?要求您为for循环的每次迭代执行另一个操作。然后,while循环执行以下操作:

  • ch不等于'n'时循环

但是。。。循环是无限的!在for循环的最后一次迭代之后,ch没有改变。所以,如果最后一个值是'y',那么while循环将继续循环。。。然后。。。然后。。。既然它没有身体,它就永远延续下去。

您有一些正确的代码位,但这些代码位位于错误的位置。

  1. 将"Do Another"的输出和输入移动到for循环之后
  2. cout << "enter a number之前添加do {`
  3. 添加'}before while(ch!='n')`

现在,当ch不是'n'时,您有一个永久循环,因为在实际循环中ch没有任何变化。