c语言的字符输入输出

**

c语言的字符输入输出

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

1-6

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


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

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

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

1-7

修正了我之前觉得\n就是EOF的想法

在这里插入图片描述
仔细看发现有7个1,\n也被循环作为对象了

总结
1.\n不是eof,且在计算输入个数时和其他字符同等计算
2.getchar()和eof连用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值