| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 795 人关注过本帖
标题:一个C问题 不明白 求指教
只看楼主 加入收藏
C_snow
Rank: 1
等 级:新手上路
帖 子:34
专家分:3
注 册:2010-2-18
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:11 
一个C问题 不明白 求指教
    程序作用:输入一个数 如果是非整数的话 就要求重新输入!如果是整数类型 假如>0的话就输出 <=0的话继续重新输入。
    下面是我源代码:
#include <stdio.h>
int main(){
    int x,y;
    while(1){
        scanf("%d %d",&x,&y);
            if(x>=0&&y>=0)
            break;}
printf("%d  %d\n",x,y);
return 0;
}
假如我输入c r。。控制台就不动了 不能重新输入 请指教。。。why?
搜索更多相关主题的帖子: 指教 
2010-03-23 21:44
jrkaho
Rank: 2
等 级:论坛游民
帖 子:24
专家分:55
注 册:2010-3-13
收藏
得分:0 
if(x>=0&&y>=0)
            break;
你这条语句:如果x>=0 并且 y>=0 那么 就跳出循环
            接着往下执行
自然 你输入c r 就是输入了2个整数 那么它不就跳出循环了? 所以就不能重新输入了
2010-03-23 21:48
C_snow
Rank: 1
等 级:新手上路
帖 子:34
专家分:3
注 册:2010-2-18
收藏
得分:0 
回复 楼主 C_snow
我知道 但是它显示不出来额。。。我在VC6.0下运行 你试试看 输入C R后 没有输出,就停止了。。本来会提示:按任意键退出的。。。
2010-03-23 21:54
一口三个汉堡
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:155
专家分:525
注 册:2010-3-21
收藏
得分:0 
%d会把字符自动转换成整数,break;语句作用是跳出整个循环。你输入c,r。满足if条件,就break了。



这是错的!!!


[ 本帖最后由 一口三个汉堡 于 2010-3-23 22:15 编辑 ]

坚持做对的事情,而不是容易的事情。
2010-03-23 21:55
ldg628
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:3
帖 子:526
专家分:3036
注 册:2009-6-23
收藏
得分:10 
答案不是像上面所说的跳出循环了,而是进入了死循环,scanf已经出错了,内部已经不再等待你的输入了

设断点跟一下程序就知道了,或者你在循环里加条打印运行下就知道了
2010-03-23 22:13
一口三个汉堡
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:155
专家分:525
注 册:2010-3-21
收藏
得分:0 
5楼的,请问下为什么会这样,我调试过,发现输入的时候好像没有把值赋值给x,y

坚持做对的事情,而不是容易的事情。
2010-03-23 22:16
C_snow
Rank: 1
等 级:新手上路
帖 子:34
专家分:3
注 册:2010-2-18
收藏
得分:0 
回复 5楼 ldg628
为什么会进入死循环呢?我输入别的也一样...难道一定要输入整数吗?那跟我的原意不合额 。。。
2010-03-23 23:00
ldg628
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:3
帖 子:526
专家分:3036
注 册:2009-6-23
收藏
得分:0 
我也不知道,scanf内部实现可能是检测到输入的内容不对异常出错,并设置了相应的静态变量或全局变量的值,且没有把相应的一些东西赋给相应的变量,而是直接返回了,并且影响到了下一次的调用,个人猜测而已。。。没看过scanf内部的代码


查了一下,死循环的原因是缓冲区的内容没有被清除,然后再一次调用scanf时,读到的缓冲区的内容仍然是原来的不合法的值。。。

9楼的....真让我汗颜呀。。。。囧


[ 本帖最后由 ldg628 于 2010-3-28 16:23 编辑 ]
2010-03-23 23:48
zhuyunshen
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:212
专家分:455
注 册:2009-11-22
收藏
得分:10 
答案不是像上面所说的跳出循环了,而是进入了死循环,scanf已经出错了,内部已经不再等待你的输入了

设断点跟一下程序就知道了,或者你在循环里加条打印运行下就知道了
2010-03-23 23:51
C_snow
Rank: 1
等 级:新手上路
帖 子:34
专家分:3
注 册:2010-2-18
收藏
得分:0 
哦。。。谢谢各位啊 哈
2010-03-24 00:20
快速回复:一个C问题 不明白 求指教
数据加载中...
 
   



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

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