while while循环不能有两个cin语句?

时间:2012-05-29 15:27:21

标签: c++ cin do-while

我只是关注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语句,该程序工作正常..

有人可以发现我的错误吗?谢谢!

4 个答案:

答案 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;
}