如何解决Eclipse中C++代码无报错却无法将内容写入txt文件的问题
问题根因
- 文件流关闭位置错误:
ofs.close()被放在了for循环内部,循环第一次执行时就会直接关闭文件流,后续所有循环迭代哪怕满足写入条件也无法写入内容。如果第一次循环就不满足if判断条件,整个过程没有任何内容写入就直接关闭文件,最终文件自然为空。 - 输入缓冲区残留问题(潜在):如果调用该函数之前使用过
cin >>读取其他内容,输入缓冲区会残留换行符,执行getline(cin,vendute)时会直接读取到空字符串,导致打开的文件路径不符合预期,生成无效空文件。 - 匹配逻辑问题(排查项):确认判断条件
(!stricmp(p,f[i].N_C)) and a<=f[i].anno是否存在至少一条匹配记录,以及参数n的取值是否正确,无匹配数据也会导致写入内容为空。
修复方案
将ofs.close()移到for循环外部即可,修复后的代码如下:
void stampaVendute(string& vendute,int& n,Opere f[],char p[],int a){ cout<<"\nInserisci il file sul quale vuoi visualizzare le opere vendute: "<<endl; // 如果存在getline读取空的问题,可在下一行添加 cin.ignore() 清除缓冲区残留换行 getline(cin,vendute); ofstream ofs; ofs.open(vendute.c_str()); if(!ofs.good()){ cout<<"C'è qualche problema nell'apertura del file"<<endl; return; } for(int i=0;i<n;i++){ if((!stricmp(p,f[i].N_C)) and a<=f[i].anno){ ofs<<"\nOPERA "<<(i+1)<<endl; ofs<<"Codice: "<<f[i].codice<<";"<<endl; ofs<<"Titolo: "<<f[i].titolo<<";"<<endl; ofs<<"Autore: "<<f[i].N_C<<";"<<endl; ofs<<"Anno: "<<f[i].anno<<";"<<endl; ofs<<"Valore: "<<f[i].prezzo<<";"<<endl; } } // 关闭文件操作移到循环外部 ofs.close(); cout<<"\nI DATI SONO STATI COPIATI CORRETTAMENTE SUL FILE!"<<endl; }
如果存在getline读取到空路径的问题,可在getline执行前添加cin.ignore()清除输入缓冲区的残留换行符。
内容的提问来源于stack exchange,提问作者Lorenzo Curcio
相关产品推荐
相关产品推荐

