C++代言人 2024-04-09 17:45 采纳率: 33.3%
浏览 4

问题找出来ftgjuyjuy

用文件调用的函数调用时卡住了,请看看有什么问题

void save()
{    
    fclose(stdout);
    freopen("date:/xingchen.XQ","w",stdout);
    cout<<XC;
    fclose(stdout);
    freopen("date:/zhiliang.XQ","w",stdout);
    cout<<ZL;
    fclose(stdout);
    freopen("date:/weixing date.XQ","w",stdout);
    cout<<XX_name;
    fclose(stdout);
}
void read()
{
    fclose(stdin);
    freopen("date:/xingchen.XQ","r",stdin);
    cin>>XC;
    fclose(stdin);
    freopen("date:/zhliang.XQ","r",stdin);
    cin>>ZL;
    fclose(stdin);
    freopen("date:/weixingdate.XQ","r",stdin);
    cin>>XX_name;
    fclose(stdin);
    if(XX_name!="未成为卫星") in_gd=1;
}

  • 写回答

5条回答 默认 最新

  • GISer Liu 2024-04-09 19:13
    关注

    该回答引用自GPT-3.5,由博主GISer Liu编写:

    根据你提供的代码,存在几个问题:

    1. save() 函数中,你使用了 fclose(stdout); 来关闭标准输出,并重新定向到文件中。但是在 C++ 中 cout 是基于标准输出的,关闭后可能会导致 cout 无法正常输出到文件。所以,在使用 freopen() 之前,最好先将 cout 的状态保存起来,以便后续恢复。
    2. read() 函数中,同样的问题存在于对标准输入的处理。你关闭了标准输入并重新定向到文件,但在 C++ 中 cin 是基于标准输入的,关闭后可能无法正常读取文件内容。同样需要保存 cin 的状态以便后续恢复。
    3. read() 函数中,你打开了 "date:/zhliang.XQ" 这个文件,但在 save() 函数中却是 "date:/zhiliang.XQ",注意这里文件路径不一致。
    4. read() 函数中,你对 XX_name 进行了比较,但在使用之前没有定义 XX_name,可能导致未定义行为。
      综上所述,解决方案如下:
      cppCopy code
      #include <iostream>
      #include <fstream>
      #include <string>
      using namespace std;
      string XC, ZL, XX_name;
      int in_gd = 0; // 你可能需要定义这个变量
      void save() {
      // 保存标准输出状态
      auto cout_state = cout.rdstate();
      // 保存到文件
      ofstream fout;
      fout.open("date:/xingchen.XQ");
      fout << XC;
      fout.close();
      fout.open("date:/zhiliang.XQ");
      fout << ZL;
      fout.close();
      fout.open("date:/weixingdate.XQ");
      fout << XX_name;
      fout.close();
      // 恢复标准输出状态
      cout.clear();
      cout.setstate(cout_state);
      }
      void read() {
      // 保存标准输入状态
      auto cin_state = cin.rdstate();
      // 从文件读取
      ifstream fin;
      fin.open("date:/xingchen.XQ");
      fin >> XC;
      fin.close();
      fin.open("date:/zhiliang.XQ");
      fin >> ZL;
      fin.close();
      fin.open("date:/weixingdate.XQ");
      fin >> XX_name;
      fin.close();
      // 恢复标准输入状态
      cin.clear();
      cin.setstate(cin_state);
      // 进行比较前确保 XX_name 已定义
      if (XX_name != "未成为卫星")
      in_gd = 1;
      }
      int main() {
      // 测试代码
      XC = "星尘";
      ZL = "智慧";
      XX_name = "未成为卫星";
      save();
      XC = "";
      ZL = "";
      XX_name = "";
      read();
      cout << XC << endl;
      cout << ZL << endl;
      cout << XX_name << endl;
      cout << "in_gd: " << in_gd << endl;
      return 0;
      }
      
      这个代码中,我使用了 ofstreamifstream
      分别进行文件的写入和读取,避免了直接操作标准输出和标准输入可能带来的问题。另外,我在读取之前定义了 in_gd 变量,避免了未定义行为。

    如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑

    评论

报告相同问题?

问题事件

  • 创建了问题 4月9日