| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1959 人关注过本帖
标题:C程序清单9.10 求解惑。谢谢了!
只看楼主 加入收藏
wangjiayou
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2017-6-25
结帖率:75%
收藏
 问题点数:0 回复次数:6 
C程序清单9.10 求解惑。谢谢了!
子函数代码如下:   当我输入英文字母的时候(比如说j),程序无限循环。 这是为什么?  我知道定义的是整型的,不该输入j。书上程序那有处理非整型的,不明白呀。求老司机解惑!  

int menu(void)
{
    int code, status;
    printf("\n%s%s\n",STARS,STARS);
    printf("Enter the number of the desired hotel:\n");
    printf("1.Faire Arms                     2.Hotel Olympic\n");
    printf("3.Chertworthy                    4.The Stock\n");
    printf("5.quit\n");
    printf("%s%s\n",STARS,STARS);
    while((status=scanf("%d",&code)!=1)||(code<1||code>5))                  //当输入的不是数字,或者输入的是数字在范围之外///
    {
        if(status!=1)
            scanf("%*s");          //处理非整型输入///
        printf("Enter an integer from 1 to 5,please.");
    }
    return code;
}

[此贴子已经被作者于2017-7-28 14:28编辑过]

搜索更多相关主题的帖子: 输入 整型 code printf the 
2017-07-28 14:21
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
回复 楼主 wangjiayou
while中 scanf的括号问题。
( (status=scanf("%d",&code) ) !=1)||(code<1||code>5))                  //当输入的不是数字,或者输入的是数字在范围之外///



至于还有没有别的问题没细看不得而知。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-07-28 14:26
wangjiayou
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2017-6-25
收藏
得分:0 
回复 2楼 renkejun1942
这是书上程序,我原样敲的,按书上的输入,运行结果和书后面的一样。可是,我就是不明白处理非整型数字if的那儿。  如果输入的是非整型,比如j。为什么程序会死循环。程序在输入非整型的时候,具体怎么运行的。我晕了,,,
2017-07-28 14:33
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
用%d 去接收字母型字符  估计会有问题

DO IT YOURSELF !
2017-07-28 15:53
wangjiayou
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2017-6-25
收藏
得分:0 
回复 4楼 wp231957
是啊,但是书上有处理非整型输入的if()那儿,我就想着输入一个非整型试试,结果死循环。  我想着既然是书上的,就算接收的是非整型,那也不能死循环呀。可谁知道,是死循环。不明白书上为什么接收了非整型,是死循环,还写出来。 所以来论坛求个明白
2017-07-28 16:30
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
都告诉你了,你括号抄错了,眼瞎也不是这样的吧?

正确的代码应该是

   while(  ( status=scanf("%d",&code) ) != 1 || ( code < 1 || code > 5 ) )

我还以为书上的代码就是错的,浪费我时间还去验证一次。

[此贴子已经被作者于2017-7-28 18:26编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-07-28 18:24
wangjiayou
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2017-6-25
收藏
得分:0 
回复 6楼 renkejun1942
谢谢
2017-07-28 20:04
快速回复:C程序清单9.10 求解惑。谢谢了!
数据加载中...
 
   



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

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