2

我只是在做一个关于 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

4 回答 4

4

使用 读取字符串后cin >> str;,输入缓冲区中仍然有一个换行符。当您cin >> i;在下一次迭代中执行时,它会读取换行符,就好像您只是按下enter而不输入数字一样,因此它不会等待您输入任何内容。

cin.ignore(100, '\n');通常的解决方法是在阅读字符串之后放置类似的东西。这100或多或少是任意的——它只是限制了它将跳过的字符数。

于 2012-05-29T15:31:37.713 回答
1

如果你改变

int str;

char str;

您的循环按您的预期工作(在 Visual Studio 2010 中测试)。
虽然,你也应该检查一下str == 'n',因为他们告诉你他们已经完成了。

于 2012-05-29T15:41:24.363 回答
1

...并且仅使用我的第一个初始输入计算总和...

这是预期的行为,因为您只是在阅读str而不是使用它。如果输入i >= 15则循环必须中断,否则继续。

于 2012-05-29T15:31:57.000 回答
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;
}
于 2020-09-15T10:18:58.030 回答