yixinwenxin 发表于 2019-9-22 17:24:17

switch语句和分支嵌套 视频演示中的问题

#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;
}
为什么会报错?语法错误?

Black.Watch 发表于 2019-9-22 17:24:18

yixinwenxin 发表于 2019-9-23 17:12
大哥...   在不重复下面的代码情况下如何能让他做到 abcde 也能得到ABCDE的结果
#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;
}

cplus 发表于 2019-9-22 21:44:08

兄弟,你的第一个问题说具体点

cplus 发表于 2019-9-22 21:45:47

你的第二个问题,我试了下,没有报错

yixinwenxin 发表于 2019-9-22 21:51:32

cplus 发表于 2019-9-22 21:44
兄弟,你的第一个问题说具体点

第一个问题在不另起一行代码的时候
输入a可以得到大写A的结果

yixinwenxin 发表于 2019-9-22 21:55:30

cplus 发表于 2019-9-22 21:45
你的第二个问题,我试了下,没有报错

第二个问题代码有问题
在输入字母的时候
不会得到
printf("%c请输入有效数字!",c);

理想小青年 发表于 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;

}

yixinwenxin 发表于 2019-9-23 12:24:10

理想小青年 发表于 2019-9-22 22:57
第二段代码错误:
错误:else if(a=b)并不是a = b
改为:else if(a == b)


但是...
第二段代码输入字符得到的结果并不是
printf("请输入有效数字!");

理想小青年 发表于 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

cplus 发表于 2019-9-23 14:43:10

兄弟,第二个问题,加个判断就是了

cplus 发表于 2019-9-23 14:46:22

兄弟,注意语法哦
defaultt:printf("请输入有效成绩!");break;

yixinwenxin 发表于 2019-9-23 17:12:47

cplus 发表于 2019-9-23 14:46
兄弟,注意语法哦
defaultt:printf("请输入有效成绩!");break;

大哥...   在不重复下面的代码情况下如何能让他做到 abcde 也能得到ABCDE的结果
#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;
}

yixinwenxin 发表于 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;
}

cplus 发表于 2019-9-25 19:47:18

换种判断方式,if else

cplus 发表于 2019-9-25 19:57:26

或者这样

case'A':
case'a': printf("分数在90分以上");break;

yixinwenxin 发表于 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;
}

他这个代码我没有试验,不过我想要的其实就是他这个结果
我突然发现其实我的问题和课后题动动手的问题很像只不过我没看课后题的前提想出来这个问题所以陷入了自己的陷阱中
页: [1]
查看完整版本: switch语句和分支嵌套 视频演示中的问题