问题:当用户输入while
时,y
无法启动循环。
我花了几个小时搜索包括Stack Overflow在内的所有论坛的线索并尝试解决这个问题(我自己学习C ++)。根据我读过的内容,我尝试过:do
循环在开头放置但是通过将前一个numb
条目乘以下一个入口阶乘(刷新问题?)来计算错误,我尝试{{1并且它会停止计算,但它也会停止而不会转到cout<<“做另一个?”。我还尝试在语句和if语句中添加/移动大括号(绝望中)。
break
答案 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)
你有一些正确的代码位,但是代码位在错误的位置。
do {
之前添加cout << "enter a number
;`before
while(ch!='n');`现在,当ch
不是'n'
时,你会有一个永久循环,因为在实际循环中没有任何变化ch
。