【问题标题】:How can I tell the program to stop using freopen如何告诉程序停止使用 freopen
【发布时间】:2015-10-31 19:30:07
【问题描述】:

我是 C++ 初学者,我有一个超出我能力范围的问题。 我在 GNU GCC 下编译。 我用

#include<stdio.h>

也称为:

#include<cstdio>

在我的程序中的某个时刻,我告诉程序使用文件 de_facut.txt 作为 in 文件:

freopen("de_facut.txt","r",stdin);

如何告诉程序使用控制台来放置输入(默认)而不是 in 文件? 首先我想从那个文件中读取,但后来 in 程序我希望用户在控制台中输入输入。 我希望你能理解我的问题,我的英语不太好。

【问题讨论】:

  • 你为什么要使用freopen?事实上,你为什么要使用 C 函数呢?这是C++!使用std::cin 作为控制台输入,使用std::ifstream 作为文件输入。没有比这更复杂的了……
  • 我不想使用流。我解决了我的问题,请阅读我对其他人的评论(如果你愿意的话)。
  • 如果你正在学习 C++,你应该学习 C++。当然,这取决于您,但如果您想发展适销对路的技能,那么您可以考虑听取专家的意见;)

标签: c++ freopen


【解决方案1】:

关于 stdout 的问题相同:How to redirect the output back to the screen after freopen("out.txt", "a", stdout),但两者的答案是相同的 - 没有干净的方法http://c-faq.com/stdio/undofreopen.html

由于您确实需要稍后在程序中从控制台读取,我建议您将文件作为文件打开。如果您想使用stdin 从文件中读取的原因是不必将文件句柄传递给fscanf 之类的函数,您可以考虑改用fstream 工具 - 代码看起来与从控制台:

#include <iostream>
#include <fstream>

using namespace std;
int main()
{
    int x;
    cin >> x; // reading from console
    {
        ifstream cin("input.txt");
        cin >> x; // reading from file
    }
    cin >> x; // again from console

    return 0;
}

【讨论】:

  • 恐怕你根本没看懂我的问题...无论如何谢谢你的帮助,我自己解决了这个问题...我现在使用 global FILE * fin;和文件* fout;并关闭我需要从控制台读取的文件。
  • @the_young_programmer:Alpha 完全理解了这个问题。你不喜欢这个答案并不会降低它的准确性。此外,如果您找到了解决方案,您应该将其作为答案发布,以便它可以帮助未来的读者。当您在此处发布问题时,它不仅适合您!
【解决方案2】:

使用fclose():

FILE *fp=freopen("data.txt","r",stdin);
/*your code here*/
fclose(fp);

参考:C library function - freopen()

【讨论】:

    【解决方案3】:

    在 Windows 中,

    freopen("CON","r",stdin);
    

    这段代码对我有用。它将标准输入切换到控制台。
    P.S:之前用来输入的文本文件,必须以换行符结束。

    【讨论】:

      猜你喜欢
      • 2017-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-28
      • 1970-01-01
      • 1970-01-01
      • 2015-07-14
      相关资源
      最近更新 更多