[C89使用一组开关盒

问题描述 投票:0回答:3

我正在尝试编写一个函数来检查输入是否为有效的double值。因为我最近了解了switch / case / default功能,所以我想用它来解决问题

switch(carrier[i]){
        case ("+" || "-") :  //case 1
            if(kvcase == closed){
                printf("Error! Invaled input\n");
            }
            else /*save sign and close case*/
                break;

        case '.' : 
            if(deccase == closed){
                printf("Error! Invaled input\n");
            }
            else /*save comma and close case*/
                break;

        case '[0-9]' :  //case 3
            break;

        case ' ':
            printf("staring with whitespace\n");
            break;

        default:
        printf("empty\n");
            break;


    }

要回答该问题,请忽略代码的resr。问题只是关于陈述案件的正确方法。

1)是第一种情况有效,还是我必须将其分为两个不同的情况

2)是否遇到案例3?我正在尝试使用一组数字。因此,如果char carrier [i]是数字,则匹配大小写。我知道isdigit()函数,但是我不想解决这个问题,除非switch case无法与set一起使用。

附加信息:-类型为char *的运营商ist,并已赋值-我正在使用gcc进行编译,无论该代码是什么,代码都必须符合c89标准。

c gcc set switch-statement c89
3个回答
1
投票

对于您的问题,语法如下:

switch (expr) {
  case '1':
    printf("expr=1");
  case '2':
    printf("expr=2");
    break;
  case '3':
    printf("expr=3");
    break;
}

所以:

  • 案例1无效:请使用case '1': case '2':。您的案例可能会编译,但无法给出预期的结果("+"||"-"可能会解析为1)。
  • 情况3无效:您必须写所有情况(从'0'到'9')。

如果要最小化,请使用if:

if (c == '+' || c == '-') {
  // ...
} else if (c == '.') {
  // ...
} else if ('0' <= c && c <= '9') { // or isdigit(c)
  // ...
} else {
  // invalid character
}

0
投票
  1. 否,至少在您的意思是:"+" || "-"的值为1,因为逻辑或运算符"+"的至少一个操作数("-"||)为非-零。

  2. 否,C switch中没有字符串或正则表达式匹配,并且用单引号(')表示的是多字节字符。

请注意,除非您中断,否则情况会持续到下一个,因此像这样的代码起作用:

case '+':
case '-':
    (void) printf("+ or -\n");
    break;

((请注意,'+''-'必须使用单引号使它们成为字符。您拥有的"+""-"是字符串,它们不等于字符,并且不能正确地比较)还是要与switch匹配,请参见strcmp。]


0
投票

交换条件范围是gcc扩展名

void foo(int ch)
{
    switch(ch)
    {
        case 'A' ... 'z':
            printf("'%c' is a letter\n", ch);
            break;
        case '0' ... '9':
            printf("'%c' is a digit\n", ch);
            break;
        default:
            printf("'%c' is something else\n", ch);
            break;
    }
}

int main()
{
    for(int x = 0; x < 50; x++)
    {
        foo(32+ rand() % 90);
    }
}

https://godbolt.org/z/tMbbx6

© www.soinside.com 2019 - 2024. All rights reserved.