我只是关注do / while循环的一个简单的c ++教程,我似乎已经完全复制了教程中写的内容,但我没有得到相同的结果。这是我的代码:
int main()
{
int c=0;
int i=0;
int str;
do
{
cout << "Enter a num: \n";
cin >> i;
c = c + i;
cout << "Do you wan't to enter another num? y/n: \n";
cin >> str;
} while (c < 15);
cout << "The sum of the numbers are: " << c << endl;
system("pause");
return (0);
}
现在,在1次迭代之后,循环只运行而不再询问我的输入,只计算i的第一个初始输入的总和。 但是,如果我删除第二对cout / cin语句,该程序工作正常..
有人可以发现我的错误吗?谢谢!
答案 0 :(得分:4)
使用cin >> str;
读取字符串后,输入缓冲区中仍然存在换行符。当您在下一次迭代中执行cin >> i;
时,它会读取换行符,就好像您只是按输入而不输入数字一样,因此它不会等待您输入任何内容。
通常的解决方法是在阅读字符串后输入类似cin.ignore(100, '\n');
的内容。 100
或多或少是任意的 - 它只会限制它会跳过的字符数。
答案 1 :(得分:1)
...并且仅用我的第一个初始输入计算总和...
这是一种预期的行为,因为您只是阅读str
而不是使用它。如果输入i >= 15
,则循环必须中断,否则继续。
答案 2 :(得分:1)
如果你改变了
int str;
到
char str;
您的循环按照您的意图工作(在Visual Studio 2010中测试)
虽然,你也应该检查str == 'n'
,因为他们告诉你他们已经完成了。
答案 3 :(得分:0)
我想你想要这个东西
在这种情况下,总和c
将小于15,并且在用户输入y时继续求和。
#include<iostream>
using namespace std;
int main()
{
int c=0;
int i=0;
char str;
do
{
cout << "Enter a num: \n";
cin >> i;
c = c + i;
cout << "Do you wan't to enter another num? y/n: \n";
cin >> str;
} while (c < 15 && str=='y');
cout << "The sum of the numbers are: " << c << endl;
return 0;
}