混合 cin 和 getline 输入问题

mixing cin and getline input issues

我正在做 c++ primer 的练习,并尝试做一个接收单词和一行作为输入的程序。如果当我要求输入一个词时(使用 cin)我按下回车键,那么程序将跳过下一行并要求输入一行(使用 getline)...如果我在 cin 中写下整个短语(例如 "hello beautifull world") 然后第一个词 ("hello") 被 cin 捕获,其他两个词 ("beautifull world") 被 getline 捕获。

我知道在 cin 中,当我输入 space 时,它会切断输入。我不明白的是两件事:

1.- 为什么如果我用 enter 结束输入(在 cin 中)它会跳过所有其余代码? (有解决方案吗?)

2.- 为什么如果我在 cin 中写了一个完整的短语,它会在执行之前将另外两个单词分配给 getline cout << "enter a line" << endl; ?

谢谢!对不起我的英语 C:

 #include <iostream>
 #include <string>
 using namespace std;

 int main() {

string word, line;

cout << "enter a word" << endl;
cin >> word;

cout << "enter a line" << endl;
getline(cin, line);

cout << "your word is " << word << endl;
cout << "your line is " << line << endl;

return 0;
}

您需要 cin.ignore() 在两个 inputs:because 之间您需要将换行符从缓冲区中清除出来。

#include <iostream>

using namespace std;

int main() {

string word, line;


cout << "enter a word" << endl;
cin >> word;

cout << "enter a line" << endl;

cin.ignore();
getline(cin,line);

cout << "your word is " << word << endl;
cout << "your line is " << line << endl;

return 0;
}

对于你的第二个答案,当你在第一个 cin 中输入整个字符串时,它只需要一个单词,其余的由 getline 接受,因此你的程序将在不接受输入的情况下执行getline

Demo