0

我正在编写一个简单的程序,要求用户输入一个字母。然后我要他输入一个短语。当它只是一个字符串时,我没有问题。

char c;
string s;
cin >> c;
cin >> s;

但是当我想要一个短语时

cin >> c;
getline(cin, s);

当我在用户输入一个字母并点击回车后运行程序时,我没有机会输入短语。当然,如果我键入字符并在空格后输入一个短语,则程序可以正常工作。

相反,当我使用第一种方法输入一个字符,然后在空格后输入单个字符串时,它不会记录该字符串。

为什么这样做?

4

2 回答 2

3

当你写一个字符并按回车键时,实际上有 2 个字符被发送到缓冲区:字符本身和\n按回车键的结果。您仅在仍保留在缓冲区中cin >> c;时才读取第一个字符。\n由于在遇到字符std::getline()之前读取所有内容\n并且因为\n是它遇到的第一个字符,所以它不读取任何内容并且程序终止。在之前添加一个std::cin.ignore();(忽略\nstd::getline,代码将起作用。

于 2013-08-28T19:25:54.423 回答
0

由于 c 只接受一个字符,因此用户按下的回车键被赋予 s,因此不会记录除此之外的任何内容。只需按一个键,无需输入字符。否则无论如何都只使用一个字符串。

于 2013-08-28T19:25:18.770 回答