4

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

}
4

1 回答 1

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,它按预期工作得很好。应该存在更优雅的修复。

于 2013-04-13T03:14:59.197 回答