| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4196 人关注过本帖
标题:又一个switch的用法问题……
只看楼主 加入收藏
独孤小梦
Rank: 1
等 级:新手上路
威 望:1
帖 子:338
专家分:0
注 册:2008-6-5
结帖率:80%
收藏
 问题点数:0 回复次数:11 
又一个switch的用法问题……
先谢谢看帖的朋友!问题如下:
我在做书上的一个习题……
题目为:给出100分制成绩,要求输出成绩等级‘A’‘B’‘C’‘D’‘E’。90分以上为A,80到89分为B…………
我这里写了个程序,还是switch问题,请各位帮忙看看!程序有什么错误!
有人说case后面只能是常量表达式,那么我这里可以吗?如果不可以,要怎么弄?
#include<stdio.h>
#define N 20
void main()
{
    int i,chengji[N];
    for(i=0;i<N;i++)
        scanf("%d",chengji[i]);   //*输入成绩*//
        fflush(stdin);           //*缓存清空*//
        for(i=0;i<N;i++)
        {
            switch(chengji[i])       //*开始判断*//
            {
            case (chengji[i]>=90): printf("成绩为:A级"); break;
            case (89>=chengji[i]>=80): printf("成绩为:B级"); break;
            case (79>=chengji[i]>=70): printf("成绩为:C级"); break;
            case (69>=chengji[i]>=60): printf("成绩为:D级"); break;
            case (chengji[i]<60): printf("成绩为:D级"); break;
            default:printf("输入错误\n");
            }
        }
}


这里错误为:
--------------------Configuration: b - Win32 Debug--------------------
Compiling...
b.cpp
C:\Documents and Settings\admin\桌面\c\b.cpp(13) : error C2051: case expression not constant
C:\Documents and Settings\admin\桌面\c\b.cpp(14) : warning C4804: '>=' : unsafe use of type 'bool' in operation
C:\Documents and Settings\admin\桌面\c\b.cpp(14) : error C2051: case expression not constant
C:\Documents and Settings\admin\桌面\c\b.cpp(15) : warning C4804: '>=' : unsafe use of type 'bool' in operation
C:\Documents and Settings\admin\桌面\c\b.cpp(15) : error C2051: case expression not constant
C:\Documents and Settings\admin\桌面\c\b.cpp(16) : warning C4804: '>=' : unsafe use of type 'bool' in operation
C:\Documents and Settings\admin\桌面\c\b.cpp(16) : error C2051: case expression not constant
C:\Documents and Settings\admin\桌面\c\b.cpp(17) : error C2051: case expression not constant
C:\Documents and Settings\admin\桌面\c\b.cpp(19) : warning C4065: switch statement contains 'default' but no 'case' labels
执行 cl.exe 时出错.

b.exe - 1 error(s), 0 warning(s)

也不知道那里错了……

[[it] 本帖最后由 独孤小梦 于 2008-7-25 00:38 编辑 [/it]]
搜索更多相关主题的帖子: switch 用法 
2008-07-25 00:35
独孤小梦
Rank: 1
等 级:新手上路
威 望:1
帖 子:338
专家分:0
注 册:2008-6-5
收藏
得分:0 
这个能编译出来,但是能不能不用IF啊?
#include<stdio.h>
#define N 20
void main()
{
    int i,chengji[N];
    for(i=0;i<N;i++)
        scanf("%d",chengji[i]);
    fflush(stdin);
    for(i=0;i<N;i++)
    {
        if (chengji[i]>=90) printf("成绩为:A级");
        if (89>=chengji[i]>=80) printf("成绩为:B级");
        if (79>=chengji[i]>=70) printf("成绩为:C级");
        if (69>=chengji[i]>=60) printf("成绩为:D级");
        if (chengji[i]<60) printf("成绩为:D级");
        else printf("输入错误\n");
    }
        
}
发现个问题,这个虽然能编译出来,但是不能用!

[[it] 本帖最后由 独孤小梦 于 2008-7-25 01:03 编辑 [/it]]

编程小菜
2008-07-25 00:52
carmen0531
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2008-7-22
收藏
得分:0 
看我的
#include<stdio.h>
#define N 3
void main()
{
    int i,chengji[N],a;
    for(i=0;i<N;i++)
        scanf("%d",&chengji[i]);   //*输入成绩*//
        fflush(stdin);           //*缓存清空*//
        for(i=0;i<N;i++)
        {
            if(chengji[i]>=90) a=1;
            else if(chengji[i]<=89&&chengji[i]>=80) a=2;
            else if(chengji[i]<=79&&chengji[i]>=70) a=3;
            else if(chengji[i]<=69&&chengji[i]>=60) a=4;
            else if(chengji[i]<60) a=5;
            else a=0;
            
            printf("%d.\t",i+1);

            switch(a)       //*开始判断*//
            {
            case 1: printf("成绩为:A级\n"); break;
            case 2: printf("成绩为:B级\n"); break;
            case 3: printf("成绩为:C级\n"); break;
            case 4: printf("成绩为:D级\n"); break;
            case 5: printf("成绩为:E级\n"); break;
            default:printf("输入错误\n");
            }
        }
}
2008-07-25 01:26
carmen0531
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2008-7-22
收藏
得分:0 
scanf后面要加取地址符  “&”
2008-07-25 01:28
dd87737530
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2008-4-5
收藏
得分:0 
case后面必须是常量表达式,而您的代码中case (chengji[i]>=90):等显然是变量。
2008-07-25 08:08
xuanzilie
Rank: 1
等 级:新手上路
帖 子:133
专家分:0
注 册:2007-7-12
收藏
得分:0 
1 scanf() 有问题
2 case(<=a<=) 这种写法不对  --> case(a<= && a>=),应该这样写

[[it] 本帖最后由 xuanzilie 于 2008-7-25 08:50 编辑 [/it]]
2008-07-25 08:30
学不懂也要学C
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2008-7-3
收藏
得分:0 
case后面必须是常量表达式,(<=a<=)这么复杂的关系表达式电脑是不能智能的分析出来的.
2008-07-25 09:51
zqmillet
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:41
专家分:108
注 册:2008-7-20
收藏
得分:0 
#include<stdio.h>
#define N 20
void main()
{
    int i,chengji;
    for(i=0;i<N;i++)
    {
        scanf("%d",&chengji);
        switch((chengji/10))
        {
        case 10: printf("\nA\n"); break;
        case 9: printf("\nA\n"); break;
        case 8: printf("\nB\n"); break;
        case 7: printf("\nC\n"); break;
        case 6: printf("\nD\n"); break;
        case 5: printf("\nE\n"); break;
        case 4: printf("\nE\n"); break;
        case 3: printf("\nE\n"); break;
        case 2: printf("\nE\n"); break;
        case 1: printf("\nE\n"); break;
        case 0: printf("\nE\n"); break;
        default:printf("\nError!\n") ;break;
        }
    }
}

试试这个
2008-07-25 09:53
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
#include<stdio.h>
#define N 20
int main()
{
    int i,res;
    for (i=0;i<N;i++)
    {
        scanf("%d",&res);
        switch (res/10)
        {
        case 10:
        case 9: printf("\nA\n"); break;
        case 8: printf("\nB\n"); break;
        case 7: printf("\nC\n"); break;
        case 6: printf("\nD\n"); break;
        case 5:
        case 4:
        case 3:
        case 2:
        case 1:
        case 0: printf("\nE\n"); break;
        default:printf("\nError!\n") ;break;
        }
    }
}

稍微改进一下。

switch的用法仅限于此,不要自己创造用法好不好……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-07-25 10:17
独孤小梦
Rank: 1
等 级:新手上路
威 望:1
帖 子:338
专家分:0
注 册:2008-6-5
收藏
得分:0 
呵呵,8楼正确回答!
错误,一开始我使用变量,来搞,后来看看书,必须使用常量表达式!呵呵!
谢谢大家^

编程小菜
2008-07-25 14:43
快速回复:又一个switch的用法问题……
数据加载中...
 
   



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

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