C ++ Loop无法正常工作

时间:2014-02-01 18:29:02

标签: c++ loops while-loop output

我希望能够在“文本”中输入内容并让它询问我是否要继续并重复,但是当我输入'y'继续时,它再次显示“输入任何内容:”然后直接进入问我是否想重复一次而不让它让我输入文字

#include <iostream>
#include <string>
using namespace std;

int main()
{
    char ans = 'y';
    string text;

    while (ans == 'y')
    {
        cout << "Enter whatever: ";
        getline(cin,text);

        //blah blah blah

        cout << "Again?(y/n): ";
        cin >> ans;
    }

    return 0;
}

输出

输入任何内容:gfdshsg fdsgfdsgfds fdgsfdsg

再次?(y / n):y

输入任何内容:再次?(y / n):

3 个答案:

答案 0 :(得分:1)

使用: -

cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');

标题文件:#include<limits>

cin >> ans;

之后

吃尾随换行符

std::numeric_limits<std::streamsize>::max()用于检索输入缓冲区可容纳的最大字符数,它允许ignore()删除尽可能多的字符直到新行。

参考:cin.ignore( )

答案 1 :(得分:1)

getline(cin,text)cin中提取整行,包括换行符。另一方面,cin >> anscin中提取单个字符,而不提取任何其他字符。这意味着您在输入字母y时添加的换行符仍然存在。然后当它循环并再次返回getline时,它已经有一行要提取(直到剩下的换行符)。

解决此问题的一种方法是在y字符后提取并丢弃所有字符,直到并包含换行符:

cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

答案 2 :(得分:0)

在getline和cin之间放置cin.ignore()