C Primer Plus(5版)第8章习题讲解(二)

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

8.10 节复习题如下:



putchar(getchar())实现的功能较为简单。getchar从标准输入中读取一个字符,putchar将这个字符输出至标准输出中。

getchar(putchar())是无效的。一是因为getchar函数不需要参数;二是因为putcha函数需要一个参数。


这道题考察的知识点一个是putchar这个函数的使用,另一个就是每个字符的含义了。

1.putchar函数输出一个字符,默认将字符输出到stdout这个标准输出流。这个标准输出流对应着哪一个输出设备,我认为是由底层来实现的,通常对应的是显示器,但也可以是其他的输出设备。如果需要将字符输出到某一个磁盘上的文件,可以使用重定向技术,将stdout这个标准输出流对应到文件。

2.这四条输出语句,第一条是输出字符H;第二条的字符是一个响铃,输出时电脑会响一下;第三条输出一个换行;第四条输出一个退格字符。


第三题已经在上文中讲过了。


我认为都是错的。

第一个,不能通过文件名来重定向文件名;

第二个,程序来重定向时,要加上<符号

第三个,应该是count < essay才对。但是参考答案说这个是合法的。我上机运行了下,运行的结果是打开essay这个文本文件。因此,我不知为何是合法的。


EOF标志着文件的末尾。在不同的系统上,文件的末尾表示是不一样的。比如unix使用ctrl+d表示文件末尾,win是以ctrl+z表示文件末尾,其他的系统也许还有其他的符号用来表示文件的末尾。

那么对于getchar函数来说,它的实现会屏蔽这些系统之间结尾不同的表示方法,是的,它知道当前系统的结尾符是什么,然后遇到结尾时,统一返回一个EOF。这个EOF的定义在不同的系统上可能定义不一样,比如定义为-1.对于程序猿来说,不需要关心EOF是什么值,只需要判断getchar函数的返回值是不是EOF,是,就表示遇到文件末尾了。

我个人认为,不是EOF屏蔽了各个系统的不同的结尾,而是getchar屏蔽了不同系统的结尾,然后统一返回一个EOF告诉调用者到达末尾了。

编辑于 2017-08-10

文章被以下专栏收录

    你觉得C语言难,一部分原因是C语言抽象,一部分原因是教材没说清这种抽象,一部分原因是你懒!第一个原因和第三个原因我没法帮你,但是我可以解决第二个原因。我喜欢用一种形象的、傻瓜式的、啰嗦的语言来讲解C语言,你会发现“切~~~C语言也是只纸老虎嘛!”