美文网首页
C Primer Plus(5版)第8章编程题1_重定向实现

C Primer Plus(5版)第8章编程题1_重定向实现

作者: 胖一一 | 来源:发表于2019-02-27 21:17 被阅读0次

    小伙伴们,对C语言编程有疑问的,可以加微信交流:poo_poo或者扫描我的头像,验证时请注明是“知友”

    一、题目描述

    本题是第8章编程题的第一道题,题目如下:

    image

    二、题目及思路分析

    从题述来看,有如下几个关键点:

    1. 有这么一个文本文件
    2. 读入文件中的文本
    3. 统计文件中字符数
    4. 判断文件的结尾

    以上4点都做到了,此题解完。那么,这4步的每一步该如何解决呢?

    1. 有这么一个文本文件

    这个好解决,事先建立好一个文本文件,里面准备一些字符。我事先准备好了一个文本文件,author.txt

    2. 读入文件中的文本

    这是要解决的第一个关键点。要读文件,必须得将文件作为程序的输入,解决方法有两个:

    1. 使用fopen等函数

    这一方法的基本思路是:

    a) 使用fopen函数打开一个文件,使得文件作为程序的输入

    b) 使用getc等函数读取文件中的字符

    c) 使用fclose等函数关闭文件

    1. 使用重定向

    这一方法使用输入重定向技术,使得stdin标准输入重定向到文件,而不是键盘。相比上一个方法,代码上要简单的多。本程序采用的是这种方法。

    3. 统计文件中字符数

    这个好解决,准备一个计数器。第2步中,每读入一个字符,计数器加1.

    4. 判断文件的结尾

    这是要解决的第二个关键点,即,如何判断读取已经到了文件末尾。

    在C中,针对不同的系统,统一以一个“EOF”来表示文件的末尾。这个“EOF”如果你去看它的定义,可能是一个整数值,比如“-1”。不少的I/O函数,如getchar(),遇到文件末尾后就会返回“EOF”。本程序采用了这个技术点。

    对于EOF的理解,可以参考我之前写的文章:C Primer Plus(5版)第8章习题讲解(二) - 知乎专栏

    三、架构设计

    四、代码

    根据上述分析,核心代码如下:

    while( (ch = getchar()) != EOF )
        {
            putchar(ch);
            count++;
        } 
    

    代码使用了getchar函数,每次从文件中读入一个字符,如果不是文件末尾的话,则输出当前字符,并且计数器加1。如果到达了文件结尾,则退出循环。

    完整的代码下载地址:

    C Primer Plus(5版)第8章编程题第1题

    五、运行结果

    image

    运行本程序时,在命令行窗口运行。

    如果你打开文本文件,去一个个数字符的话,你会发现只有95个字符,为何运行结果却输出97个字符?

    这是因为文本文件中还包含了两个你看不见的字符,就是换行符了,文本文件中包含了2个换行符。

    这道题先这样了,有疑问的可以一起讨论。

    相关文章

      网友评论

          本文标题:C Primer Plus(5版)第8章编程题1_重定向实现

          本文链接:https://www.haomeiwen.com/subject/kmyquqtx.html