c语言的字符输入输出

**

c语言的字符输入输出

K&R的the c programming language
练习1-6/1-7

1-6

当我输入程序时发现while后面的语句无法执行

c语言的字符输入输出
当时我没有意识到这个循环并没有结束;
这一节主要说的就是EOF和getchar putchar;
书中有这样一句话 执行 c=getchar()!=EOF其中c的值将被置为0或1(取决于调用getchar函数时是否碰到文件结束标志)
这句话要和我后面的这句话联系起来看就能发现问题了
windows认为,如果缓冲中还有其它内容,ctrl+z不表示输入结束,仅代表当前行输入结束,只在单独一个ctrl+z的时候才表示输入结束。
仔细想想看其实就能发现这时候你再输入一组字符串还是能够执行这个循环体如果他真的跳出这个循环了就应该不能够执行而是要执行下一行的命令,可以理解为在这个循环体中的输入其实可以说是一个文件因为没有EOF所以电脑就没觉得这个循环体任务结束了而是以为你只输完了一行傻傻的待机着。你要告诉他(win中输入ctrl+z)EOF和他说已经结束了,叫他跳出这个循环。
c语言的字符输入输出
所以当你循环体中有getchar()要记得和EOF连用啊!

还有一个需要注意的地方
c语言的字符输入输出
如果缓冲中还有其它内容,ctrl+z不表示输入结束,仅代表当前行输入结束,只在单独一个ctrl+z的时候才表示输入结束
必需读到一个换行符或者文件结束符EOF才进行一次输出

所以你看到在缓冲区有东西的情况下有一个框框乱码

1-7

巩固了我之前觉得\n就是EOF的想法

c语言的字符输入输出
仔细看发现有7个1,\n也被循环作为对象了