我在使这个程序正常工作时遇到问题。程序询问问题,然后将该问题写入文件。然后它会问你是否要输入另一个问题。如果你点击'1'它将循环并要求你输入另一个问题。程序本身运行和关闭没有任何问题。问题是无论我输入多少问题,它都只会将第一个问题写入文件。其余部分由空行代替。如果我关闭程序并重新运行它,它将再次只写一行。我确定cin.ignore与它有关,但我无法弄清楚如何解决它。请帮忙。
#include <iostream>
#include <fstream>
#include <limits>
#include <string>
using namespace std;
int main ()
{
string question;
int x;
ofstream a_file("test.txt",ios::app);
do
{
cout<<"Enter a question:\n\n";
getline(cin,question);
a_file<<question<<"\n";
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout<<"Would you like to enter another question?\n";
cout<<"1 for yes. 2 for no: ";
cin>>x;
}
while (x!=2);
a_file.close();
cout<<"\nYour submition has been saved. Have a nice day!\n";
cout<<"Press enter to close the program.";
cin.ignore();
cin.get();
}
答案 0 :(得分:3)
与您的代码相关的问题在于:
cin.ignore(numeric_limits<streamsize>::max(), '\n');
将忽略整行。然后当你尝试使用getline
来获取下一行时,你在while循环中什么也得不到。
您可以按如下方式解决此问题:( Pablo指出编辑)
do
{
if (question.length() >0)
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cin.clear();
cout<<"Enter a question:\n\n";
getline(cin,question);
a_file<<question<<"\n";
cout<<"Would you like to enter another question?\n";
cout<<"1 for yes. 2 for no: ";
cin>>x;
}while (x!=2);
我试过这个修复程序将gcc 4.5.3,它按预期运行良好。应该存在更优雅的解决方案。