|
网站首页
|
业界新闻
|
小组
|
威客
|
人才
|
下载频道
|
博客
|
代码贴
|
在线编程
|
编程论坛
|
登录
注册
短消息
我发表的主题
我参与的主题
我收藏的贴子
我上传的附件
我下过的附件
编辑个人资料
我的博客
用户控制面板
搜索
道具
恢复默认风格
碧海青天
秋意盎然
棕红预览
粉色回忆
蓝雅绿
紫色淡雅
青青河草
e点小镇
橘子红了
红红夜思
水晶紫色
雪花飘飘
新年快乐
风格
短消息
论坛展区
帮助
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 此段代码有些混乱,求指点。。
我的收件箱(0)
欢迎加入我们,一同切磋技术
用户名:
密 码:
共有
925
人关注过本帖
标题:
此段代码有些混乱,求指点。。
只看楼主
加入收藏
bits
等 级:
新手上路
帖 子:6
专家分:0
注 册:2013-5-14
结帖率:
0
楼主
收藏
已结贴
√
问题点数:20 回复次数:10
此段代码有些混乱,求指点。。
char ch;
.......
while((ch=getchar())!=EOF)
一直以为,我输入的字符存储到ch中,结果今天才知道是getchar()的返回值存储在ch中并与EOF进行判断。
但是我搞不明白如果我在while循环里加入printf("ch is %c",ch); 发现我输入的字符还是保存在ch中。
这太令我矛盾了,希望各位指点一下。
搜索更多相关主题的帖子:
矛盾
2013-05-15 16:06
举报帖子
使用道具
赠送鲜花
韶志
来 自:斗气大陆
等 级:
贵宾
威 望:
44
帖 子:2223
专家分:13592
注 册:2013-3-22
第
2
楼
收藏
得分:7
我混乱了
三十年河东,三十年河西,莫欺少年穷!
2013-05-15 16:54
举报帖子
使用道具
赠送鲜花
Ryker
等 级:
侠之大者
威 望:
1
帖 子:145
专家分:420
注 册:2013-2-19
第
3
楼
收藏
得分:7
getchar()的返回值? 貌似就是你输入的字符啊..一次读一个字符
EOF是个特殊的字符..一个组合按键.CTRL + Z 或 CTRL + D(这个应该是UNIX系统吧..) ,表示文件的结尾,因为C默认是把键盘输入视为文件输入
ch = getchar() 先把一个字符赋给ch ,再用 ch 与 EOF 比较 ..
这个很难理解吗..
难道是我理解有错误?
看一下MinGW的stdio.h文件里的getchar
__CRT_INLINE int __cdecl __MINGW_NOTHROW getchar (void)
{
return (--stdin->_cnt >= 0)
?
(int) (unsigned char) *stdin->_ptr++
: _filbuf (stdin);
}
[
本帖最后由 Ryker 于 2013-5-15 17:11 编辑
]
2013-05-15 17:05
举报帖子
使用道具
赠送鲜花
bits
等 级:
新手上路
帖 子:6
专家分:0
注 册:2013-5-14
第
4
楼
收藏
得分:0
回复 3楼 Ryker
关键是我现在不清楚ch里是什么内容在和EOF进行比较。
,是用户输入的字符 还是getchar()的返回值? 还是我一开始就理解错了。。
以下摘自《C和指针》第五章 P70 最后一段:
-----------------------------------------------------------------------------------------------------------------------------------------------------------
EOF需要的位数比字符型值所能提供的位数要多,这也是getchar返回一个整型值而不是字符型值得原因,然而,把getchar的返回值首先存储于ch中将导致它被截短。然后这个被截断的值被提升为整型并与EOF进行比较。当这段存在错误的代码在使用有符号字符集的机器上运行时,如果读取了一个值为\337的字节时,循环将会终止,因为这个值截断在提升之后与EOF相等。当这段代码在使用无符号字符集的机器上运行时,这个循环将永远不会停止。
-----------------------------------------------------------------------------------------------------------------------------------------------------------
这一段最后一句话也不理解
---------------The Art of program ---------------
2013-05-15 17:57
举报帖子
使用道具
赠送鲜花
笑傲
来 自:迪拜
等 级:
蝙蝠侠
威 望:
5
帖 子:223
专家分:856
注 册:2013-3-9
第
5
楼
收藏
得分:7
以下是引用
bits
在2013-5-15 17:57:03的发言:
关键是我现在不清楚ch里是什么内容在和EOF进行比较。
,是用户输入的字符 还是getchar()的返回值? 还是我一开始就理解错了。。
以下摘自《C和指针》第五章 P70 最后一段:
-----------------------------------------------------------------------------------------------------------------------------------------------------------
EOF需要的位数比字符型值所能提供的位数要多,这也是getchar返回一个整型值而不是字符型值得原因,然而,把getchar的返回值首先存储于ch中将导致它被截短。然后这个被截断的值被提升为整型并与EOF进行比较。当这段存在错误的代码在使用有符号字符集的机器上运行时,如果读取了一个值为\337的字节时,循环将会终止,因为这个值截断在提升之后与EOF相等。当这段代码在使用无符号字符集的机器上运行时,这个循环将永远不会停止。
-----------------------------------------------------------------------------------------------------------------------------------------------------------
这一段最后一句话也不理解
如果为无符号的,那么getchar()的返回值就是个无符号的值,和EOF比较肯定是不相等,那不就会一直循环下去嘛,终止不了;
练就一身本领,只为笑傲江湖!
2013-05-15 19:23
举报帖子
使用道具
赠送鲜花
bits
等 级:
新手上路
帖 子:6
专家分:0
注 册:2013-5-14
第
6
楼
收藏
得分:0
回复 5楼 笑傲
哦对谢谢,真是蒙了。。。这都要问。。。。。
---------------The Art of program ---------------
2013-05-15 20:21
举报帖子
使用道具
赠送鲜花
bits
等 级:
新手上路
帖 子:6
专家分:0
注 册:2013-5-14
第
7
楼
收藏
得分:0
有木有大神顺便帮忙看看这个。。
float a=0;
while(scanf("%f",&a)==0)
printf("error");
如果用户输入了非浮点数。会提示error。。
加入我在标准输入流键入了 C然后'\n' 。为什么就无限循环了。。我认为应该循环两次,输入流就没东西了,可是结果差强人意哦。。
---------------The Art of program ---------------
2013-05-15 20:24
举报帖子
使用道具
赠送鲜花
笑傲
来 自:迪拜
等 级:
蝙蝠侠
威 望:
5
帖 子:223
专家分:856
注 册:2013-3-9
第
8
楼
收藏
得分:0
scanf每次都从缓冲区的开始位置读取数据,并且只获取需要的内容,剩余内容,譬如回车、空格等都还留在缓冲区。下次循环再执行scanf的时候,缓冲区里还有东西,就又把前面的剩余内容拿出来判断是不是它要读取的内容了
练就一身本领,只为笑傲江湖!
2013-05-15 21:09
举报帖子
使用道具
赠送鲜花
bits
等 级:
新手上路
帖 子:6
专家分:0
注 册:2013-5-14
第
9
楼
收藏
得分:0
回复 8楼 笑傲
明白了谢谢
---------------The Art of program ---------------
2013-05-16 08:12
举报帖子
使用道具
赠送鲜花
Ryker
等 级:
侠之大者
威 望:
1
帖 子:145
专家分:420
注 册:2013-2-19
第
10
楼
收藏
得分:0
一个小函数,清空缓冲区..需要的时候调用一下..
void clearcache(void)
{
while(getchar() != '\n')
continue;
}
2013-05-16 09:02
举报帖子
使用道具
赠送鲜花
11
1/2页
1
2
快速回复:
此段代码有些混乱,求指点。。
数据加载中...
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.016621 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved