我在下面的代码中遇到getline
函数的问题。在“获取”信息部分,我希望能够存储整个句子,但我无法使其工作。
当我打开我的程序时,它只是跳过信息的输入。
p.s:我是C ++的新手
以下是我遇到问题的代码部分(输入信息):
void add() {
string name;
string faction;
string classe;
string race;
string info;
ofstream wowdatabase("wowdatabase.txt", ios::app);
cout << "Add a race or class" << endl;
cout << "---------------------------------------------------------" << endl;
cout << "" << endl;
cout << "Enter the name of the race or class (only small letters!):" << endl;
cin >> name;
cout << "Enter Race (Type -, if writen in name section):" << endl;
cin >> race;
cout << "Enter Class (Type -, if writen in name section):" << endl;
cin >> classe;
cout << "Enter faction (Alliance/Horde):" << endl;
cin >> faction;
cout << "Enter the information:" << endl;
getline(cin, info);
wowdatabase << name << ' ' << faction << ' ' << classe << ' ' << race << ' ' << info << endl;
wowdatabase.close();
system("CLS");
main();
}
现在它工作正常=)但是,当我想再次输出信息时,它只显示句子中的第一个单词?
答案 0 :(得分:2)
在此声明之前
getline(cin, info);
进行以下调用
cin.ignore( numeric_limits<streamsize>::max(), '\n' );
要使用此来电,您必须包含标题<limits>
。
问题在于执行语句
之后cin >> faction;
与输入键ENTER对应的新行字符位于输入缓冲区中,下一个getline调用将读取此字符。
答案 1 :(得分:0)
读完分数后,空行字符将被遗留。随后对getline
的调用将会读取它。为避免在getline
来电之前添加对cin.ignore的通话。