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;
}
答案 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');