鱼C论坛

 找回密码
 立即注册
查看: 1960|回复: 15

[已解决]switch语句和分支嵌套 视频演示中的问题

[复制链接]
发表于 2019-9-22 17:24:17 | 显示全部楼层 |阅读模式
1鱼币
#include<stdio.h>
int main()
{
        char ch;
        printf("成绩:");
        scanf("%c",&ch);
        switch(ch)
        {
                case'A':printf("分数在90分以上");break;
                case'B':printf("分数在80-90分以上"); break;
                case'C':printf("分数在70-80分以上"); break;
                case'D':printf("分数在60-70分以上"); break;
                case'E':printf("分数在60分以下"); break;
                defaultt:printf("请输入有效成绩!");break;
        }
       
        return 0;
}
'A''B';'C';'D';'E'。这几个输入小写会出现default
'A,a'default
'A|a'default
'A','a'错误
在不另起一段代码的情况下输入a可以得到printf("分数在90分以上");


#include<stdio.h>
int main ()
{
        int a,b;
        char c;
        printf("输入两个数:");
        scanf("%d %d",&a,&b);
        scanf("%c",&c);
        if(a!=b)
        {
                if(a<b)
                {
                        printf("%d<%d",a,b);
                }
                else
                {
                        printf("%d>%d",a,b);
                }
        }
        else if(a=b)
        {
                printf("%d=%d",a,b);
        }
        else
        {
                printf("%c请输入有效数字!",c);
        }
        return 0;
}
为什么会报错?  语法错误?
最佳答案
2019-9-22 17:24:18
yixinwenxin 发表于 2019-9-23 17:12
大哥...   在不重复下面的代码情况下  如何能让他做到 a  b  c  d  e 也能得到A  B  C  D  E  的结果
#i ...
#include<stdio.h>
#include<ctype.h>  //C专门处理字符的函数

int main()
{
        char ch;
        printf("成绩:");
        scanf("%c",&ch);

        ch = toupper(ch);  //toupper()--输入小写返回大写     调用大写字母转换小写字母函数,兼容大小写。
        switch(ch)
        {
                case'A':printf("分数在90分以上");break;
                case'B':printf("分数在80-90分以上"); break;
                case'C':printf("分数在70-80分以上"); break;
                case'D':printf("分数在60-70分以上"); break;
                case'E':printf("分数在60分以下"); break;


                default:printf("请输入有效成绩!");break;
        }

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-22 17:24:18 | 显示全部楼层    本楼为最佳答案   
yixinwenxin 发表于 2019-9-23 17:12
大哥...   在不重复下面的代码情况下  如何能让他做到 a  b  c  d  e 也能得到A  B  C  D  E  的结果
#i ...
#include<stdio.h>
#include<ctype.h>  //C专门处理字符的函数

int main()
{
        char ch;
        printf("成绩:");
        scanf("%c",&ch);

        ch = toupper(ch);  //toupper()--输入小写返回大写     调用大写字母转换小写字母函数,兼容大小写。
        switch(ch)
        {
                case'A':printf("分数在90分以上");break;
                case'B':printf("分数在80-90分以上"); break;
                case'C':printf("分数在70-80分以上"); break;
                case'D':printf("分数在60-70分以上"); break;
                case'E':printf("分数在60分以下"); break;


                default:printf("请输入有效成绩!");break;
        }

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-22 21:44:08 | 显示全部楼层
兄弟,你的第一个问题说具体点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-22 21:45:47 | 显示全部楼层
你的第二个问题,我试了下,没有报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-9-22 21:51:32 | 显示全部楼层
cplus 发表于 2019-9-22 21:44
兄弟,你的第一个问题说具体点

第一个问题  在不另起一行代码的时候
输入a  可以得到大写A的结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-9-22 21:55:30 | 显示全部楼层
cplus 发表于 2019-9-22 21:45
你的第二个问题,我试了下,没有报错

第二个问题代码有问题
在输入  字母  的时候
不会得到
printf("%c请输入有效数字!",c);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-22 22:57:49 | 显示全部楼层
本帖最后由 理想小青年 于 2019-9-22 22:58 编辑

第二段代码错误:
错误:else if(a=b)  并不是a = b
改为:else if(a == b)

上面case语句,最好加上作用域,防止过老的编译器有一些问题,像vc6
switch(ch)
{
     case 'A':
    {
        printf("xxxxx");
    }
    break;

}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-9-23 12:24:10 | 显示全部楼层
理想小青年 发表于 2019-9-22 22:57
第二段代码错误:
错误:else if(a=b)  并不是a = b
改为:else if(a == b)

但是...
第二段代码输入字符得到的结果并不是
printf("请输入有效数字!");
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-23 14:08:22 | 显示全部楼层
yixinwenxin 发表于 2019-9-23 12:24
但是...
第二段代码输入字符得到的结果并不是
printf("请输入有效数字!");


你只判断了 a,b的数值
1. a != b   
2. a == b
3. else 这个条件根部不成立
因为你输入的a,b两个数值要不相等,想么不相等,没有第三种可能的,所以永远不可能进入else
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-23 14:43:10 | 显示全部楼层
兄弟,第二个问题,加个判断就是了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-23 14:46:22 | 显示全部楼层
兄弟,注意语法哦
defaultt:printf("请输入有效成绩!");break;

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-9-23 17:12:47 | 显示全部楼层
cplus 发表于 2019-9-23 14:46
兄弟,注意语法哦
defaultt:printf("请输入有效成绩!");break;

大哥...   在不重复下面的代码情况下  如何能让他做到 a  b  c  d  e 也能得到A  B  C  D  E  的结果
#include<stdio.h>
int main()
{
        char ch;
        printf("成绩:");
        scanf("%c",&ch);
        switch(ch)
        {
                case'A':printf("分数在90分以上");break;
                case'B':printf("分数在80-90分以上"); break;
                case'C':printf("分数在70-80分以上"); break;
                case'D':printf("分数在60-70分以上"); break;
                case'E':printf("分数在60分以下"); break;

                case'a':printf("分数在90分以上");break;
                case'b':printf("分数在80-90分以上"); break;
                case'c':printf("分数在70-80分以上"); break;
                case'd':printf("分数在60-70分以上"); break;
                case'e':printf("分数在60分以下"); break;

                default:printf("请输入有效成绩!");break;
        }
        
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-9-23 17:19:12 | 显示全部楼层
cplus 发表于 2019-9-22 21:45
你的第二个问题,我试了下,没有报错

第二个问题自己解决了     加个char c[]=""  定义
#include<stdio.h>
int main ()
{
        int a,b;
        char c[]="";
        printf("输入两个数:");
        scanf("%d %d",&a,&b);
        scanf("%s",c);
        if(a!=b)
        {
                if(a<b)
                {
                        printf("%d<%d",a,b);
                }
                else
                {
                        printf("%d>%d",a,b);
                }
        }
        else if(a=b)
        {
                printf("%d=%d",a,b);
        }
        else(c);
        {
                printf("请输入有效数字!");
        }
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-25 19:47:18 | 显示全部楼层
换种判断方式,if else
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-25 19:57:26 | 显示全部楼层
或者这样

case'A':
case'a': printf("分数在90分以上");break;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-9-25 20:58:50 | 显示全部楼层
cplus 发表于 2019-9-25 19:57
或者这样

case'A':

#include<stdio.h>
#include<ctype.h>  //C专门处理字符的函数

int main()
{
        char ch;
        printf("成绩:");
        scanf("%c",&ch);

        ch = toupper(ch);  //toupper()--输入小写返回大写     调用大写字母转换小写字母函数,兼容大小写。
        switch(ch)
        {
                case'A':printf("分数在90分以上");break;
                case'B':printf("分数在80-90分以上"); break;
                case'C':printf("分数在70-80分以上"); break;
                case'D':printf("分数在60-70分以上"); break;
                case'E':printf("分数在60分以下"); break;


                default:printf("请输入有效成绩!");break;
        }

        return 0;
}

他这个代码我没有试验,不过我想要的其实就是他这个结果
我突然发现其实我的问题和课后题  动动手的问题很像  只不过我没看课后题的前提想出来这个问题所以陷入了自己的陷阱中
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-4 11:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表