getline(cin,s1)没有提示我输入

getline(cin,s1) not prompting me for input

本文关键字:提示 输入 cin s1 getline      更新时间:2023-10-16

getline(cin,s1)函数不会提示我输入字符串。即使满足if条件,它看起来也像是被跳过了。有什么帮助吗?代码如下。问题出在第一个if语句中。

//练习3.2

#include "stdafx.h"
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int main(){
char a1;
 cout << "Read line (L) or word (W)?:";
cin >> a1;
if (a1 == 'l'){
    string s1;
    getline(cin, s1);
    cout << s1 << endl;
}
else{
    string s1;
    while (cin >> s1){
        cout << s1 << endl;
    }
}
system("pause");
 return 0;   
}

当你这样做时:

cin >> some_char_variable;

它读取char,并使输入流指针指向下一个字符,该字符始终是您输入的换行符。

如果您随后执行getline(),它将获得该行,该行由您留在那里的输入流中的换行符所描绘。

这与在C中混合getchar()fgets()的问题相同,两者的组合通常会让新来者感到困惑。

我倾向于避免混合这两种风格,例如在任何地方使用getline(),例如使用:

string choice;
getline(cin, choice);
if (choice[0] == 'l') ...

但是,如果你必须将它们混合在一起,你可以在尝试接受更多数据之前清除这条线,比如:

cin.ignore(numeric_limits<streamsize>::max(), 'n');