freopen 函数和 fopen 函数简单介绍

freopen 函数和 fopen 函数简单介绍偶然碰到了 freopen 这个函数 起初以为和 fopen 什么的一样 但是发现 close 后不能好好输出了 先说说 fopen 吧 1 fopen 在 C 语言中遇到使用文件输入 输出的 最常见的可能就是它了吧 fopen 调用的一般形式为 文件指针名 fopen 文件名 使用文件方式 文件指针名 必须是 FILE 类型的指针变量 文件名 被打开的文件名使用文件方式

  偶然碰到了freopen这个函数,起初以为和fopen什么的一样,但是发现close后不能好好输出了。先说说fopen()吧。

1. fopen()

  在C语言中遇到使用文件输入/输出的,最常见的可能就是它了吧。

  • 文件指针名,必须是FILE类型的指针变量;
  • 文件名,被打开的文件名
  • 使用文件方式,是文件的类型和操作要求,有如下几种:
    • r(read):只读;
    • w(write):只写;
    • a(append):追加;
    • t(text):文本文件,可省略;
    • b(binary):二进制文件。
    • + :读和写


  打开方式由以上几种基本类型组合而成,注意:

  • r 打开文件,该文件必须存在,且只能从该文件读出;
  • w 打开文件只能想该文件写入。若文件不存在,则自动新建;若文件已存在,则删去原文件再新建

  这个函数的用法如下:

FILE *fp1,*fp2; //定义文件指针类型 fp1=fopen("input.in","r"); //用fopen函数以只读方式(r)打开输入文件input.in; fp2=fopen("output.out","w");//用fopen函数以写入方式(w)打开输出文件output.out; fscanf(fp1,"%d",&temp);//fscanf从文件中读取数据,fp1文件指针指定文件; fprintf(fp2,"%d",temp);//fprintf将数据输出到文件,fp2文件指针指定文件; fclose(fp1);//关闭文件指针。 fclose(fp2);

  在启用fopen函数时,需要特定的函数fscanf,fprintf对文件操作;普通的scanf和printf依然能在命令行界面操作。

2. freopen()

  freopen这个函数,在ACM中应用很广,因为ACM试题中可能有大量输入数据,程序运行往往不是一次成功的,每次运行都重新输入很浪费时间,因此freopen就可以解决测试数据的重复输入问题。

函数声明:

FILE * freopen(const char *filename, const char *mode,FILE *stream);

参数说明:

  • filename:要打开的文件名;
  • mode:文件打开的模式,和fopen中的模式(r/w)相同。
  • stream:文件指针,通常使用标准流文件(stdin/stdout/stderr)

使用方法:

freopen("data.in","r",stdin); freopen("data.out","w",stdout); fclose(stdin); fclose(stdout);

  freopen()函数重定向了标准流,使其指向指定文件,因此不需要修改scanf和printf。

  确实很方便吧,不过还有个问题要解决。通过freopen我们把标准流重定向到了指定文件,那么如果我们想让一些信息输出到屏幕,该怎么做呢?

  fopen函数由fprintf和printf两个函数,分别输出到文件和控制台。而freopen函数,需要修改函数的filename参数,让标准流输出到控制台。而这个控制台设备文件的名字与操作系统相关。

DOS、Win系统:

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

Linux:

freopen("/dev/console","r",stdin);

  这样就能实现一部分需要的数据输出到文件,同时另一部分数据输出到控制台。这样让程序拥有一些简单的交互能力。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/208307.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午11:53
下一篇 2026年3月19日 上午11:53


相关推荐

  • python中sqrt函数用法_Python : sqrt() 函数

    python中sqrt函数用法_Python : sqrt() 函数开平方函数sqrt()返回x的平方根(x>0)语法:importmathmath.sqrt(x)注意:此函数不可直接访问,需要导入math模块,然后需要使用math静态对象调用此函数。参数x—数值表达式返回结果是浮点数。importmath#Thiswillimportmathmoduleprint”math.sqrt(100):”,math.s…

    2022年6月2日
    67
  • PyCharm安装库numpy失败的解决方法

    PyCharm安装库numpy失败的解决方法事情是这样的,博主初学python和机器学习,在跑一个代码的时候被提示出现以下错误:(能被提示出现这个错误,可见确实是初学了!)图1:跑代码时候的报错注:图1是安装好了numpy后出现的第二个错误,错误本质是一样的,都是缺少某个库百度查资料后得知在PyCharm中有一个安装库的方法是:Settings>>PythonInterpreter>>点击图2中红色圈起来的加号,出现图3图2:安装库的一个方法图3:点击图2的加号后出现的界面顺利的话,只

    2022年8月25日
    19
  • 归一化处理方法

    归一化处理方法数据归一化问题是数据挖掘中特征向量表达时的重要问题 当不同的特征成列在一起的时候 由于特征本身表达方式的原因而导致在绝对数值上的小数据被大数据 吃掉 的情况 这个时候我们需要做的就是对抽取出来的 featuresvect 进行归一化处理 以保证每个特征被分类器平等对待 下面我描述几种常见的 Normalizatio 并提供相应的 python 实现 其实很简单 1 0 1 标准

    2026年3月19日
    2
  • 中级php面试题以及答案(net高级程序员面试题)

          博主最近找工作,记录了不少面试题,有些还是挺值的学习的,这里记录一下。有些我会给出参考链接,有些需要大家自己百度了,持续补充。。一、公司一1、php的接口和抽象类有什么区别,应用场景有哪些https://blog.csdn.net/hanxueyu666/article/details/75712917 https:…

    2022年4月16日
    67
  • windows端安装eclipse导入maven工程的方法

    windows端安装eclipse导入maven工程的方法windows端安装eclipse导入maven工程的方法第一:下载并安装eclipse。下载地址:http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/mars/R/eclipse-jee-mars-R-macosx-cocoa-x86_64.tar.gz第二:jdk下载并安装。下…

    2022年5月31日
    35
  • linux进入命令行模式_pycharm的terminal

    linux进入命令行模式_pycharm的terminalPyCharm终端设置cmd

    2025年8月9日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号