gpt4 book ai didi

c++ - 循环写入文件时遇到问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:03:42 25 4
gpt4 key购买 nike

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

}

最佳答案

与您的代码相关的问题在这里:

 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 上尝试了此修复程序,它按预期运行良好。应该存在更优雅的修复。

关于c++ - 循环写入文件时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15983716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com