问题1:我们在编写程序时经常需要数一些数据到屏幕,来查看我们的结果是否正确,虽然直接输出到屏幕,查看起来呢很方便,但当数据量很大时,需要耗费大量的时间。于是我们想到能不能通过输出到文件来减少时间能。相同的数据是输出到屏幕更快还是输出到文件更快?

这个地方变量有很多:磁盘速度、目的文件有没有其他IO请求、文字渲染的方式、API具体的操作流程、操作系统本身的设计等等都会影响输出到文件的速度。但一般来说还是会比直接输出到屏幕快(而且通常快几个数量级)。

比如我们可以用如下代码进行测试,如果测试输出到文件的时间就在开头加入#define ToFile,如果测试输出到屏幕的时间,就注释掉。

//#define ToFile

#include <stdio.h>

#include <time.h>

int main()

{

    clock_t start_test,end_test;

    start_test = clock();

    FILE *output_fils;

    output_fils = fopen("output_file.txt","w");

    if(output_fils == NULL)

    {

        perror("Error to create the file\n");

    }

    long unsigned int i;

    for(i=0;i<1000000;i++)

    {

        #ifdef ToFile

            fprintf(output_fils,"item %ld\n",i);

        #else

            printf("item %ld\n",i);

        #endif

    }

    fclose(output_fils);

    end_test = clock();

    printf("The total time is: %lf",((double)(end_test-start_test)/CLOCKS_PER_SEC));

    return 0;

}

通过编译运行,我们会发现,如果输出到文件仅需要0.015s,但是直接输出到屏幕却需要12.906s,两者差距很大。

问题2:既然输出到文件要比输出到屏幕快的多,那我们怎样编程使结果全部输出到文件呢?

当然,你可以在每个需要输出的地方用fprintf来设置输出到文件。但是考虑到那样太麻烦了,而且我们已经系管理直接使用printf,所以我们可以用一个函数freopen来把标准输出流导出到我们设定的文件流中,这样我们以后用printf输出到东西全部到达我们设定的文件中。

但是有个问题是,那我们如何在某些特定的时候在屏幕上输出提示信息呢?考虑到标准错误流也是输出到屏幕,所以我们可以假借这个标准错误流。示例代码如下:

#include <stdio.h>

int main()

{

    int num;

    freopen("output_file.txt","w",stdout);

    fprintf (stderr,"Please input your num:"); // output to the screen

    scanf("%d",&num);

    printf("The num that you input is:%d",num); // output to the file

    fclose (stdout);

    return 0;

}

屏幕输出VS文件输出的更多相关文章

  1. log4j日志输出到文件的配置

    1.Maven的dependency 2.log4j.properties的配置 3.Junit的Test类 4.web.xml的配置(非必要) 5.spring的db.config的配置(非必要) ...

  2. 【转】【整理】将Linux脚本中的正常输出,警告,错误等信息输出到文件中

     本文来自:http://blog.csdn.net/woshinia/article/details/18040063   很早以前  编译的时候 就在用 2>&1,但是一直没有生成一 ...

  3. linux重定向总结:如何将shell命令的输出信息自动输出到文件中保存

    在做批量实验室,例如跑批量MR的作业,我们会写好shell脚本,然后启动脚本,等所有作业执行完再去看结果,但是这些执行时的信息如何保存下来到文件中呢?下面这个命令可以完成这个任务. sh batchj ...

  4. 用otl写的oracle取数工具,执行传入在查询语句,把结果输出到文件

    项目中经常需要用到此类型的工具 #pragma warning (disable:4786) #include <iostream> #include <map> #inclu ...

  5. 将Linux下编译的warning警告信息输出到文件中[整理笔记]

    Linux中,脚本语言环境中,即你用make xxx即其他一些普通linux命令,比如ls,find等,不同的数字,代表不同的含义: 数字 含义 标准叫法0 标准输入  stdin = standar ...

  6. C++ Primer Plus 文章17章 进,输出和文件

    文章17章 进.输出和文件 1.当到达输入句子.他将刷新输出缓冲区满输出电流 2.streambuf分类 它提供了用于各种操作的一个缓冲 ios_base类表示流的一般特征 ios基础的类ios_ba ...

  7. shell编程学习笔记(七):Shell中将指定内容输出到文件中

    我们这里把echo要打印的内容输出到文件中 以下蓝色字体部分为Linux命令,红色字体的内容为输出的内容: # cd /opt/scripts # vim script06.sh 开始编写script ...

  8. sqlplus中设置在屏幕中上不打印出输出

    在某些特定的情况下我们想在做某种实验,需要执行一段sql语句,但是不想在屏幕上打印出sql语句的结果(太长了)可以采用如下方式.1    把想要执行的语句写到一个sql脚本中,例如:[oracle@i ...

  9. C++ primer plus读书笔记——第17章 输入、输出和文件

    第17章 输入.输出和文件 1. 对键盘进行输入缓冲可以让用户在将输入传输给程序之前返回并更正.C++程序通常在用户按下回车键时刷新输入缓冲区. 2. 一些I/O类 streambuf类为缓冲区提供了 ...

随机推荐

  1. 一次编译Android源码实验

    注意,本文只供参考,是老文章 1.必要的软件环境 sudo apt-get install build-essential sudo apt-get install make sudo apt-get ...

  2. 【Javascript】列表查询页面,简单地保存上一次查询的查询参数

    开发中经常做一些查询参数 + 列表参数的功能,这些功能有时候需提供导出Excel,或带超链接到其他明细页面的功能点. 在一些交互性要求严格的系统,需求方会要求: 用户第一个输入某些查询条件进行列表查询 ...

  3. 【SQL】SQL中笛卡尔积、内连接、外连接的数据演示

    SQL的查询语句中,常使用到内连接.外连接,以及连接的基础--笛卡尔积运算. 在简单的SQL中,也许我们还分辨清楚数据如何连接,一旦查询复杂了,脑子也犯浆糊了,迷迷糊糊的. 本文,简单以数据形式记录连 ...

  4. VC++ 监控指定目录改变

    转载:http://www.cnblogs.com/doublesnke/archive/2011/08/16/2141374.html VC++实施文件监控:实例和详解 相关帮助: http://h ...

  5. js将数组元素随机排序的方法

    在群里看见的一个面试题,试了一下,还是可以做出来的,但是需要查资料,主要是岁一些方法了解的不清楚,可能这个跟我平时不太注重基础理论有关系,像什么构造函数啊,我根本就不关心什么叫构造函数,我一直都以为我 ...

  6. UVA 11552 四 Fewest Flops

    Fewest Flops Time Limit:2000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Statu ...

  7. MSChart使用

    制作报表的时候结果出现画红线处的信息太散, 如果没必要全部显示出来,我们可以使用这种效果: 注意和前面的区分,这个功能叫做Collect Pie Slices(收集分区) 要实现此功能,应先了解相关信 ...

  8. ARM寻址方式

    寻址方式: 所谓寻址方式就是处理器根据指令中给出的信息来找到指令所需操作数的方式. 1.立即数寻址 2.寄存器寻址 3.寄存器间接寻址 就是寄存器中存放的是操作数在内存中的地址 例如以下指令: LDR ...

  9. C语言文法定义与C程序的推导过程

    program à external_declaration | program external_declaration <程序> ->  <外部声明> |  < ...

  10. hdu 栈题1022&1702

    http://acm.hdu.edu.cn/showproblem.php?pid=1022 http://blog.csdn.net/swm8023/article/details/6902426此 ...