首页 文章

混合cin和getline输入问题[重复]

提问于
浏览
0

这个问题在这里已有答案:

我正在做c primer的练习,并尝试做一个接收单词和一行的程序 . 如果当我要求一个单词(带有cin)时我按下回车键,那么程序只是跳过下一行并且要求换行(使用getline)...如果我在cin中写了一个完整的短语(比如“你好美丽的世界“)然后第一个词(”你好“)由cin和其他两个词(”美丽的世界“)被getline捕获 .

据我所知,在cin中,当我输入一个空格时,它会切断输入 . 我不明白的是两件事:

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

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

谢谢!抱歉我的英文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;
}

1 回答

  • 1

    你需要在两个输入之间使用cin.ignore():因为你需要在两者之间刷新换行符 .

    #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

相关问题