免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3936 | 回复: 17
打印 上一主题 下一主题

关于C的for循环语句问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-27 12:03 |只看该作者 |倒序浏览
我刚刚接触C语言,在谭浩强的书上看到一个例子很不理解;
for(;c=getchar()!='\n'
printf("%c",c);

输入的数据是computer
输出的结果是computer

他说的东西我都明白,可是最后一句我就不理解了


说的是  不要以为输出结果是ccoommppuutteerr

他不说到好,我本来没想到这个错误的结果.但是他说出来之后我不知道
应该如何理解才能得到他这个错误的结果.
希望有人指点迷津.

-----------------------------------------------------------------------------------------------

我理解了谭Sir的意思了,和终端的关系不大.
他的意思是想说整个computer是一起被放到缓冲里的.(在输入了'\n'之后)
然后再连续的从缓冲里读了8次的字符输出出来

而不是我敲一个c他就回显一个c,敲一个o他就紧跟着显示一个o.

[ 本帖最后由 gldamao 于 2008-10-28 12:27 编辑 ]

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
2 [报告]
发表于 2008-10-27 12:36 |只看该作者
偶也不太明白为什么是谭说的那样

论坛徽章:
0
3 [报告]
发表于 2008-10-27 12:44 |只看该作者
你可以很自信的认为:

当初他学的时候,有出过这种问题,这是他的个人问题,不带有普遍性

论坛徽章:
0
4 [报告]
发表于 2008-10-27 12:44 |只看该作者
当然,这么想还有个前提:

你本身的理解是正确的

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
5 [报告]
发表于 2008-10-27 13:05 |只看该作者
原帖由 gldamao 于 2008-10-27 12:03 发表
我刚刚接触C语言,在谭浩强的书上看到一个例子很不理解;
for(;c=getchar()!='\n'
printf("%c",c);

输入的数据是computer
输出的结果是computer

他说的东西我都明白,可是最后一句我就不理解了


说 ...


getchar()是一个字符一个字符的读取,但是为什么之后回车才输出的,这是因为里面的机制是行缓冲,而不是字符。也就是只有你输入的内容有类似的行结束符是才认为你输入结束了。然后将你之前输入的都printf

论坛徽章:
0
6 [报告]
发表于 2008-10-27 13:10 |只看该作者
原帖由 gldamao 于 2008-10-27 12:03 发表
我刚刚接触C语言,在谭浩强的书上看到一个例子很不理解;
for(;c=getchar()!='\n';)
printf("%c",c);

输入的数据是computer
输出的结果是computer

他说的东西我都明白,可是最后一句我就不理解了


说 ...

for(;(c=getchar())!='\n';)

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
7 [报告]
发表于 2008-10-27 13:12 |只看该作者
偶的这篇帖子应该可以解答LZ,LZ参考一下。
http://bbs.chinaunix.net/viewthread.php?tid=981231&extra=

论坛徽章:
0
8 [报告]
发表于 2008-10-27 14:48 |只看该作者
原帖由 gldamao 于 2008-10-27 12:03 发表
我刚刚接触C语言,在谭浩强的书上看到一个例子很不理解;
for(;c=getchar()!='\n'
printf("%c",c);

输入的数据是computer
输出的结果是computer

他说的东西我都明白,可是最后一句我就不理解了


说 ...

如果你玩过终端,对这问题就不会觉得莫名其妙了。
通常是将终端的输入设置成NO ECHO模式,这时,输出是
computer
如果你将终端的输入设置成ECHO模式,输出是
ccoommppuutteerr
谭老师没玩过终端,不知道还有这可能性。

论坛徽章:
0
9 [报告]
发表于 2008-10-27 22:25 |只看该作者
原帖由 Godbach 于 2008-10-27 13:12 发表
偶的这篇帖子应该可以解答LZ,LZ参考一下。
http://bbs.chinaunix.net/viewthread.php?tid=981231&extra=



那文章看了感觉明白不少,谢谢了.

论坛徽章:
0
10 [报告]
发表于 2008-10-28 00:48 |只看该作者

回复 #1 gldamao 的帖子

很多情况下linux终端默认是行缓冲的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP