标题:switch case 句型中,case部分应该怎么写?
只看楼主
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
结帖率:93.75%
已结贴  问题点数:20 回复次数:7 
switch case 句型中,case部分应该怎么写?
程序代码:
char*scan() {
    static char temp[11];
    int i=0;
    char c;
    while(c=getchar()) {
loop1:
        switch(c) {
            case '#':
                if(i==0) {
                    c=getchar();
                    if(c=='\n') {
                        temp[0]='#';
                        temp[1]='\0';
                        return temp;
                    } else goto loop1;

                } else {
                    goto loop2;
                }
                break;
            case 'a'-'z'://[ERROR]duplicate case value
                temp[i++]=c;
                break;
            case 'A'-'Z'://[ERROR]duplicate case value
                temp[i++]=c;
                break;
            default:
loop2:
                if(i>10)i=10;
                temp[i]='\0';
                if(i>2) {
                    printf("{%s}",temp);
                    return temp;
                } else {
                    printf("{}");
                    return NULL;
                }
                break;
        }
    }


}

我印象中switch case 句型里,case部分除了简单的整形和字符型以外好像是也能像我这样指定一个区间的吧?

请问是我记错了语法   还是switch case根本就不可以指定区间的?


搜索更多相关主题的帖子: switch case temp return break 
2018-01-26 09:48
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:20 
case 'a'...'z':
2018-01-26 10:16
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
这样……倒不如不在case里面做文章,在switch里面做文章,可以试试switch((c-'a')/('z'-'a'))case 0:;~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-01-26 10:24
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
得分:0 
参考  https://
写了个布尔值得判断语句,,,又报错了   汗

char*scan() {
    static char temp[11];
    int i=0;
    char c;
    while(c=getchar()) {
        switch(c) {
            case '#':
                if(i==0) {//如果#不在行首,我们就继续执行下一个switch,
                    c=getchar();
                    if(c=='\n') {
                        temp[0]='#';
                        temp[1]='\0';
                        return temp;
                    }

                }
            default:
                switch(true) {
                    case c>='a'&&c<='z'://[Error]'c'cannot appear in a constant-expression
                        temp[i++]=c;
                        break;
                    case 'A'-'Z'://[Error]'c'cannot appear in a constant-expression
                        temp[i++]=c;
                        break;
                    default:
                        if(i>10)i=10;
                        temp[i]='\0';
                        if(i>2) {
                            printf("{%s}",temp);
                            return temp;
                        } else {
                            printf("{}");
                            return NULL;
                        }
                        break;
                }
                break;
        }
    }
}
请问是因为这中写法是其他语言的吗?还是我又写错了?

φ(゜▽゜*)♪
2018-01-26 10:29
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
switch(c) 这里可用表达式
case 这里是常数
2018-01-26 10:49
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用九转星河在2018-1-26 10:24:00的发言:

这样……倒不如不在case里面做文章,在switch里面做文章,可以试试switch((c-'a')/('z'-'a'))case 0:;~

这样复杂点,也不好读,有除法运算效率也可能有影响。
用 case 'a'...'z' 简单明了。
2018-01-26 10:52
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
得分:0 
回复 3楼 九转星河
不好用,因为我这里是需要分成3类做处理(甚至更多)。

一类小写字母,一类大写字母,一类其他字母。用这样的除法switch  和一般的if()else  又有什么区别

φ(゜▽゜*)♪
2018-01-26 11:29
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
复杂的也可这样switch(function())
#include <stdio.h>

int fun(char ch)
{
    if (ch>='a' && ch<='z')
        return 0;
    else if (ch>='A' && ch<='Z')
        return 1;
    else
        return 2;
}

int main(void)
{
    char ch;
    scanf("%c", &ch);
    switch (fun(ch))
    {
        case 0:
            printf("a...z\n");
            break;
        case 1:
            printf("A...Z\n");
            break;
        default:
            printf("default\n");
    }
    return 0;
}



[此贴子已经被作者于2018-1-26 11:51编辑过]

2018-01-26 11:49



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




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

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