标题:自学C求助:switch语句选不到正确选项
只看楼主
w906414
Rank: 2
等 级:论坛游民
帖 子:75
专家分:76
注 册:2015-5-29
结帖率:81.82%
已结贴  问题点数:20 回复次数:8 
自学C求助:switch语句选不到正确选项
char option;
while(option=getchar()&option!='#')//不知道这样写可不可以,想用while实现只有在有输入且输入不为#的时候进行循环。
    {
        switch(option)
        {
            case 'a':printf("Please enter the weight of chaoxianji\n");
                     scanf("%f",&weight_cxj);
                     break;
            case 'b':printf("Please enter the weight of tiancai\n");
                     scanf("%f",&weight_tc);
                     break;   
            case 'c':printf("Please enter the weight of buluobo\n");
                     scanf("%f",&weight_hlb);
                     break;            
            default:printf("Enter error:Please enter again(# to quit).\n");
        }
      }//代码的问题是当我输入一个字符,即使是a、b、c,还是会执行default语句。并且执行结束直接跳出while循环了
搜索更多相关主题的帖子: option 
2015-07-26 10:45
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
我记不住优先级,所以我老实地加括号
另外,逻辑与 是 &&,不是 &
2015-07-26 11:15
yx1998
Rank: 2
等 级:论坛游民
威 望:1
帖 子:30
专家分:35
注 册:2015-7-24
得分:5 
是这样的:
1.逻辑与或都是两个符号双写 如&& ||
2.你的getchar语句存在问题。第一次getchar获得你输入的字符,但紧接着第二次会获得换行符,所以错误。

静心学习,远离浮躁。
2015-07-26 12:00
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:5 
以下是引用yx1998在2015-7-26 12:00:51的发言:

是这样的:
1.逻辑与或都是两个符号双写 如&& ||
2.你的getchar语句存在问题。第一次getchar获得你输入的字符,但紧接着第二次会获得换行符,所以错误。


第2对吗

授人以渔,不授人以鱼。
2015-07-26 12:06
w906414
Rank: 2
等 级:论坛游民
帖 子:75
专家分:76
注 册:2015-5-29
得分:0 
回复 4楼 TonyDeng
就程序运行结果来看,没有第二条错误,在改了第一条之后就正常运行了。谢谢大家
2015-07-26 12:46
w906414
Rank: 2
等 级:论坛游民
帖 子:75
专家分:76
注 册:2015-5-29
得分:0 
回复 3楼 yx1998
再次验证后发现3楼是对的,在default后加了一个printf("%d",option);发现错误的时候option的值是10也就是换行符,那么请问这种错误是怎么造成的?该怎么避免呢?
2015-07-26 13:06
w906414
Rank: 2
等 级:论坛游民
帖 子:75
专家分:76
注 册:2015-5-29
得分:0 
回复 4楼 TonyDeng
事实证明3L说的是对的,我之前以为错误是由scanf()的输入进入switch的选择语句了,后来想想也是错的离谱。
2015-07-26 13:11
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
以下是引用w906414在2015-7-26 13:11:21的发言:

事实证明3L说的是对的,我之前以为错误是由scanf()的输入进入switch的选择语句了,后来想想也是错的离谱。

没人说用getchar()接收数据非要按一个字符按一个回车不可。循环使用getchar()的,可以一直输入,到最后才按一下回车,程序是在你按回车之后才开始循环getchar()的,此时所有输入的字符会逐个压入getchar()系列中,不用每个字符都敲回车。

[ 本帖最后由 TonyDeng 于 2015-7-26 13:18 编辑 ]

授人以渔,不授人以鱼。
2015-07-26 13:17
w906414
Rank: 2
等 级:论坛游民
帖 子:75
专家分:76
注 册:2015-5-29
得分:0 
回复 7楼 w906414
明白了
2015-07-26 13:36



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-455791-1-1.html




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

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