You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 00:45:06