我希望能够在“文本”中输入内容并让它询问我是否要继续并重复,但是当我输入'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):
答案 0 :(得分:1)
使用: -
cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
(标题文件:#include<limits>
)
cin >> ans;
之后
吃尾随换行符
std::numeric_limits<std::streamsize>::max()
用于检索输入缓冲区可容纳的最大字符数,它允许ignore()
删除尽可能多的字符直到新行。
答案 1 :(得分:1)
getline(cin,text)
从cin
中提取整行,包括换行符。另一方面,cin >> ans
从cin
中提取单个字符,而不提取任何其他字符。这意味着您在输入字母y
时添加的换行符仍然存在。然后当它循环并再次返回getline
时,它已经有一行要提取(直到剩下的换行符)。
解决此问题的一种方法是在y
字符后提取并丢弃所有字符,直到并包含换行符:
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
答案 2 :(得分:0)
在getline和cin之间放置cin.ignore()