我正在编写一个简单的程序,要求用户输入一个字母。然后我希望他输入一个短语。当它只是一个字符串我没有问题。
char c;
string s;
cin >> c;
cin >> s;
但是当我想要一个短语时
cin >> c;
getline(cin, s);
当我在用户输入一个字母并点击输入后运行该程序时,我没有机会输入该短语。当然,如果我输入字符并在空格后输入一个短语,程序就可以正常工作。
相反,当我输入一个字符,然后使用第一个方法在空格后输入一个字符串时,它不会记录字符串。
为什么会这样做?
答案 0 :(得分:3)
当你写一个字符然后按回车键时,实际上有两个字符被发送到缓冲区:字符本身和\n
作为按下回车键的结果。只有cin >> c;
仍在缓冲区中时,\n
才会读取第一个字符。由于std::getline()
在遇到\n
字符之前读取所有内容,并且因为\n
是它遇到的第一个字符,所以它不会读取任何内容并且程序终止。在std::cin.ignore();
之前添加\n
(忽略std::getline
),代码将有效。
答案 1 :(得分:0)
由于c只接受一个字符,因此用户按下的输入键被赋予s,因此不会记录除此之外的任何内容。只按一个键,不输入该字符。或者只是使用一个字符串。