我有一个while循环,它询问用户的查询并接受响应,可以是单词,也可以是句子。输出让我感到困惑。
std::string response;
while (response != "!quit")
{
cout << "Query? ";
cin >> response;
if (response == "!quit")
{
cout << "Thank you for using this program!";
exit(0);
}
}
此输出如下:
Query? how are you
Query? Query? Query? how are you today
Query? Query? Query? Query? hi
Query?
为什么打印出“查询”字样的字数与响应相同?
答案 0 :(得分:5)
EC.presence_of_element_located
将会读取直到发现空白为止。
因此,当您输入“您好吗”时,std::cin
将被称为三次,这样它将占用所有三个空格。因此,第一个cin
将显示“如何”,第二个是“是”,第三个是“您”。
因此,教给您的是,要阅读一个句子,您需要另一种方法,例如通过使用std::getline
,如下所示:
cin
在What's the difference between getline and std::istream::operator>>()?中阅读更多内容
PS:请注意,您可能想使用std::getline(std::cin, response)
读取数字后可能会出现尾随换行符,例如通过使用cin
。
答案 1 :(得分:3)
可以是一个单词,也可以是一个句子。
当您想读一个单词时,可以使用cin >> response;
。这将在找到的下一个空白字符处停止读取。
要阅读句子(整行)时,需要使用getline(cin, response);
。这将在找到的下一个新行\n
字符处停止读取。
因此,由于您希望在一行上输入一个输入,因此请使用第二个功能。
编辑:另外,请注意!在非字符串I / O操作之后使用getline()
(例如cin >> n;
,其中n
是int
变量)时,您需要知道非字符串I / O。 / O函数不会“吃掉” \n
字符。 getline()
会找到它,将其食用并停止,因此最好通过空的cin.getline();
通话自己食用。