C Primer Plus(5版)第8章习题讲解(一)
来源:互联网 发布:阿里云系统的手机 编辑:程序博客网 时间:2024/06/05 06:00
C Primer Plus 第五版的第8章的习题3是我觉得是一个很不错的练手习题,考察输入函数、重定向等多种技术,做完这道题,可以对C语言的标准I/O有更深的认识。
最新的文章在“C语言编程技术分享”,也就是我的公众号里更新,欢迎关注!
题目是这样的:
假设您有一个程序count,该程序对输入的字符数进行计数。用count程序设计一个命令行命令,对文件essay中的字符进行计数并将结果保存在名为essayct的文件中。
这道题的要求,我汇总并分析如下:
1. 题中要求对输入的字符数进行计数
分析:这个要求设计到以下几点:
1) 需要一个能够接收输入的函数。我想可以用getchar函数试试;
2) 如何告诉这个输入函数,输入已经结束。标志输入结束可不是什么回车键,而是一种特有的结束标志:EOF。
3) 一个专门用于计数的计数器。这个可以使用一个变量即可。
2.用count程序设计一个命令行命令
分析:题目要求count程序是一个命令,需要在cmd窗口或者shell中运行。这个不难,只要count程序编译成功,生成可执行程序即可。
3.对文件essay中的字符进行计数
分析:原来,count程序的输入不是来自于一般的键盘输入,而是来自于一个已经存在的文件。那么需要一种技术,让count程序从文件essay中读入字符,而且还能判断出文件是不是已经到达末尾。这个技术我想就是重定向技术了,而且标志文件末尾的标志是EOF。
4.将计数结果保存在名为essayct文件中
分析:count程序将计数的结果要输出到一个文件中,而不是简单的输出大片显示器上。因此,需要一种技术,让count程序将结果导入到一个文件中。这种技术也是重定向技术。
有了上面的初步分析,我们可以写出一个初步的代码来实现这个题目的要求。代码如下:
#include <stdio.h>#include <stdlib.h>int main(void){int counter = 0; //计数器int ch; //存储从文件中读入的字符while( EOF != (ch = getchar()) ) //使用getchar函数从标准输入中读取字符,当读取到末尾时停止循环 {counter++; //计数器自增 } printf("%d", counter);return 0;}
在程序同一目录下新建一个文本文件essay.txt,内容是qwert
运行结果如下:
程序虽短,五脏俱全。代码我也给出了注释,理解起来应该不难。此程序使用了如下几项技术:
1.getchar函数。getchar函数默认的输入来源是标准输入,即stdin,通常是键盘。但是根据题目的要求,输入就不能是键盘了,而是一个文件。
2.判断文件结尾。不同的操作系统,对待文件的结尾标志是不一样的。unix系统的文件结束标志是ctrl+d,win是ctrl+z。为了屏蔽不同系统的差异,统一用EOF来表示。
3.重定向技术。对于getchar和printf函数,stdin和stdout默认是键盘和显示器,为了从文件输入和输出到文件,需使用重定向技术“<”和“>”,使得stdin和stdout重定向到文件。
作为此题的衍生,可以修改下。比如,如果要求从键盘输入字符,将结果输出到文件,那么如何告知程序从键盘已经输入完毕?如何改用putchar函数将字符个数输出到文件?可以留言一起讨论!
小伙伴们,对C语言编程有疑问的,可以加微信交流:poo_poo或者扫描我的头像,验证时请注明“C”!
- C Primer Plus(5版)第8章习题讲解(一)
- c primer plus第14章习题
- c++primer plus 第12章习题
- C primer plus第1章(概览)习题
- C primer plus第9章(函数)习题
- C primer plus第10章(指针)习题
- C primer plus第8章(字符输入/输出和输入确认)习题
- C primer plus第5章(运算符、表达式和语句)习题
- C++ primer plus 第11章习题
- c++ primer plus 第13章习题
- C++ primer plus 第14章习题
- 《C Primer Plus(第5版)中文版》第7章编程练习第8题
- C Primer Plus(第5版)中文版
- C++primer plus(第四版)第五章习题参考
- C Primer Plus(第五版) 第十四章 课后习题 4
- C Primer Plus(第五版) 第十四章 课后习题 6
- 整理下C++primer plus 第六版第六章习题。
- c++primer plus 第六版第四章编程习题
- C语言编译过程分成四个步骤
- 邝斌的ACM模板(素数筛选和合数分解)
- sdut_1116
- Android开发中常用的跳转系统自带界面方法
- [网易]回文序列
- C Primer Plus(5版)第8章习题讲解(一)
- spring事物只能回滚runtimeexception解决办法
- 执行脚本登录的子SHELL(课堂笔记引发的思考)
- 常用增强学习实验环境 I (MuJoCo, OpenAI Gym, rllab, DeepMind Lab, TORCS, PySC2)
- C语言编程的优化问题
- SSH问题之jsp跳转不到相应的action上
- MySQL协议分析
- linux中的http服务浅谈(1)
- socket 编程流程图