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

时间:2014-11-05 02:21:47

标签: c++

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;   
}

1 个答案:

答案 0 :(得分: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');