无法在循环中写入文件

时间:2013-04-13 02:56:01

标签: c++

我在使这个程序正常工作时遇到问题。程序询问问题,然后将该问题写入文件。然后它会问你是否要输入另一个问题。如果你点击'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();

}

1 个答案:

答案 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,它按预期运行良好。应该存在更优雅的解决方案。