我有两个函数,一个将我的数组内容保存到一个文本文件和一个将相同内容读入数组的函数。一切都是用VS编写的,现在我正在尝试为我的应用程序制作GUI。 我的保存到文件功能就像一个魅力,但当我尝试在QT中读取该文件时,我的读取功能没有任何反应。我是否必须重写该功能才能在QT中工作?如果没有可能是什么问题? 如果in.fail(),我可以“抛出”什么?
void DH::read()
{
ifstream in("text.txt");
string strKcal=" ";
int kcal=0;
string strCarb=" ";
double carb=0.0;
string strProtein=" ";
double protein=0.0;
string strLipid=" ";
double lipid=0.0;
string name;
string usrName;
string usrName1;
string usrName2;
string date;
string nrs;
getline(in,nrs);
this->nrOfDiets=atoi(nrs.c_str());
if(!in.fail())
{
for(int i=0;i<this->nrOfDiets && in.good();i++)
{
getline(in,usrName1,' ');
getline(in,usrName2);
usrName=usrName1+ " " + usrName2;
getline(in,date);
getline(in,name,'\t');
getline(in,strKcal,'\t');
getline(in,strCarb,'\t');
getline(in,strProtein,'\t');
getline(in,strLipid);
kcal=atoi(strKcal.c_str());
carb=atoi(strCarb.c_str());
protein=atoi(strProtein.c_str());
lipid=atoi(strLipid.c_str());
this->dh[i]=new Diet(name,kcal,protein,carb,lipid,usrName,date);
}
}
else
//cout<<"Error!"<<endl;
in.close();
}
我知道我可以用于&gt;&gt;而不是一直使用getline,但由于某种原因它不起作用:S
答案 0 :(得分:1)
通常,不,您不需要做任何不同的事情来使正确的代码作为Qt应用程序的一部分工作。我没有详细研究过你的代码,但至少看起来很好。
但是,有些事情会有所不同。首先,图形程序中的控制通常来自命令行程序。您不会明确地编写程序流程。相反,您将对事件做出反应(按钮点击,菜单选择等)。其次,您通常通过一些不同的启动方法(单击图标或从IDE运行它)来运行它们,这可能会改变程序的当前工作目录。
如果没有更多信息,我们无法告诉您问题所在。但我会检查程序是否实际从相对路径“text.txt”引用有效文件的目录运行。此外,这可能听起来很疯狂,但要验证您的代码是否实际被调用。
在旁注中,您关于运营商的最后一句话&gt;&gt;与getline相比......有时可以继续使用有效的东西,但是如果可以的话,你可能会花时间去做这样的事情。了解为什么事情没有按照你的想法做到,往往会为你节省大量的时间和挫折。