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

时间:2013-08-15 22:41:49

标签: c++ loops while-loop

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

我花了几个小时搜索包括Stack Overflow在内的所有论坛的线索并尝试解决这个问题(我自己学习C ++)。根据我读过的内容,我尝试过:do循环在开头放置但是通过将前一个numb条目乘以下一个入口阶乘(刷新问题?)来计算错误,我尝试{{1并且它会停止计算,但它也会停止而不会转到cout<<“做另一个?”。我还尝试在语句和if语句中添加/移动大括号(绝望中)。

break

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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循环
    • fact乘以j并将值存储在fact
    • 打印fact
    • 的值
    • 要求做另一个
      • 将值存储在ch
    • 继续for循环

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

  • 循环ch不等于'n'

但是......循环是无限的!在for循环的最后一次迭代之后,ch不会更改。所以,如果最后一个值是'y',那么while循环会继续循环...然后......并且结束......因为它没有正文,所以它会永远持续下去。

答案 2 :(得分:0)

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

  1. 在for-loop之后将“Do Another”的输出和输入移动到。
  2. do {之前添加cout << "enter a number;`
  3. 添加'} before while(ch!='n');`
  4. 现在,当ch不是'n'时,你会有一个永久循环,因为在实际循环中没有任何变化ch