| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1110 人关注过本帖
标题:[求助]关于C语言的while循环
只看楼主 加入收藏
jackys2006
Rank: 1
等 级:新手上路
帖 子:195
专家分:0
注 册:2006-3-10
收藏
 问题点数:0 回复次数:8 
[求助]关于C语言的while循环

大家看下面两个循环
(1)while(scanf("%d",&hr)!=1)
{
while((ch=getchar())!='\n')putchar(ch);
printf(" is not a valid value.");
}

(2)while(scanf("%d",&hr)!=1)
{
printf(" is not a valid value.");
}

这两个循环的作用是如果输入的不是整数,那么给出提示并要求重新输入,只是第一个循环多了回显用户错误的输入。
我想在某些场合不需要回显错误,所以删除了while((ch=getchar())!='\n')putchar(ch);语句。
但是在调试运行中发现,第二个循环是个死循环。
为什么第一个循环行,第二个不行?回显语句对循环有什么影响?

搜索更多相关主题的帖子: C语言 value printf putchar 
2007-06-12 20:30
百年不亮
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:789
专家分:0
注 册:2006-4-14
收藏
得分:0 
while((ch=getchar())!='\n')的作用主要是清空输入缓冲区,因为用户输入时在缓冲区留下了一个回车'\n',如果不清除掉scanf("%d",&hr)永远跳不过这个回车。你不需要回显错误改成这样就行了:
while(scanf("%d",&hr)!=1)
{
while((ch=getchar())!='\n');
printf(" is not a valid value.");
}
2007-06-12 22:08
kuyaya
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2007-6-2
收藏
得分:0 
仅在while语句后以单独的分号形成了空语句
2007-06-12 23:44
百年不亮
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:789
专家分:0
注 册:2006-4-14
收藏
得分:0 
看懂了在说话
2007-06-12 23:45
jackys2006
Rank: 1
等 级:新手上路
帖 子:195
专家分:0
注 册:2006-3-10
收藏
得分:0 
谢谢各位,其实这是信息残余问题。

2007-06-17 13:33
chyhome
Rank: 1
等 级:新手上路
威 望:1
帖 子:102
专家分:0
注 册:2007-5-13
收藏
得分:0 
同意2楼

2007-06-17 15:28
twsgl
Rank: 1
等 级:新手上路
帖 子:136
专家分:5
注 册:2007-6-15
收藏
得分:0 

第二题只要输入是不为1,其他的输出都是可以的是个死循环
第一个只要输入不为1,而且是字符直到遇到空格是才输出的,所以不是死循环

2007-06-17 17:15
夜中梦
Rank: 1
等 级:新手上路
帖 子:132
专家分:0
注 册:2007-5-12
收藏
得分:0 
2楼好样的

2007-06-17 19:55
dainichuhai
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2005-10-14
收藏
得分:0 

百年对c确实比一般人要理解深刻
当然包括偶


2007-06-17 22:41
快速回复:[求助]关于C语言的while循环
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020497 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved