C 循环无法正常工作

C++ Loop not working right

本文关键字:工作 常工作 循环      更新时间:2023-10-16

我希望能够将某些内容输入"文本",并询问我是否要继续重复,但是当我输入'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;
}

输出

输入Whate:gfdshsg fdsgfdsgfds fdgsfdsg

再次?(y/n):y

输入Whate:再次?(Y/N):

getline(cin,text)cin提取一条线,包括newline字符。另一方面,cin >> anscin提取单个字符,而别无其他。这意味着输入字母y时添加的newline字符仍然存在。然后,当它绕圈旋转并再次回到getline时,它已经有一条线需要提取(直到其余的newline字符)。

解决此问题的一种方法是提取和丢弃y字符之后的所有字符,直到包括newline字符:

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

使用: -

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

标题文件:#include<limits>

cin >> ans;

之后

吃尾随的新线

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

ref: cin.ignore( )

在getline和cin和cin

之间放置cin.ignore()