Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C89开关箱使用一套_C_Gcc_Set_Switch Statement_C89 - Fatal编程技术网

C89开关箱使用一套

C89开关箱使用一套,c,gcc,set,switch-statement,c89,C,Gcc,Set,Switch Statement,C89,我正在尝试编写一个函数来检查输入是否是有效的双精度值。因为我最近了解了switch/case/default特性,所以我想用它来解决这个问题 switch(carrier[i]){ case ("+" || "-") : //case 1 if(kvcase == closed){ printf("Error! Invaled input\n"); } else /*save

我正在尝试编写一个函数来检查输入是否是有效的双精度值。因为我最近了解了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是否有效,或者我必须将其分为两个不同的案例

案例3有效吗?我试着用一组数字。因此,如果char carrier[i]是一个数字,那么大小写是匹配的。我知道isdigit函数,但我不想只是回避这个问题,除非开关盒不可能与一个集合一起工作

额外信息: -carrier ist的类型为char*,并且已被赋予一个值 -我使用gcc编译,代码需要使用c89标准,不管是什么

不,至少从您的意思来看,+| |-的值是1,因为逻辑or运算符| |的操作数+和-中至少有一个是非零的

不,C开关中没有匹配的字符串或正则表达式,使用单引号“大小写为多字节字符”

请注意,除非您中断,否则案例会一直延续到下一个案例,因此类似这样的代码可以工作:

case '+':
case '-':
    (void) printf("+ or -\n");
    break;
请注意,您需要对“+”和“-”使用单引号使其成为字符。您拥有的+和-是字符串,它们的比较结果与字符不相等,并且无论如何不能通过开关正确匹配,请参阅strcmp

不,至少从您的意思来看,+| |-的值是1,因为逻辑or运算符| |的操作数+和-中至少有一个是非零的

不,C开关中没有匹配的字符串或正则表达式,使用单引号“大小写为多字节字符”

请注意,除非您中断,否则案例会一直延续到下一个案例,因此类似这样的代码可以工作:

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

请注意,您需要对“+”和“-”使用单引号使其成为字符。您拥有的+和-是字符串,比较起来与字符不相等,并且无论如何都无法通过开关正确匹配,请参阅strcmp。

有关您的问题,语法如下所示:

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

案例1无效:用例“1”:案例“2”:。您的案例可能已编译,但未给出预期结果+| |-可能解析为1。 案例3无效:您必须将所有案例从“0”写入“9”。 如果要将其最小化,请在以下情况下使用:

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

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

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

案例1无效:用例“1”:案例“2”:。您的案例可能已编译,但未给出预期结果+| |-可能解析为1。 案例3无效:您必须将所有案例从“0”写入“9”。 如果要将其最小化,请在以下情况下使用:

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

开关箱范围为gcc扩展

void foo(int ch)
{
    switch(ch)
    {
        case 'A' ... 'Z':
        case 'a' ... 'z':
            printf("'%c' is a letter\n", ch);
            break;
        case '0' ... '9':
            printf("'%c' is a digit\n", ch);
            break;
        case '+':
        case '*':
        case '-':
        case '%':
        case '/':
        case '^':
            printf("'%c' is a math operator\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);
    }
}

开关箱范围为gcc扩展

void foo(int ch)
{
    switch(ch)
    {
        case 'A' ... 'Z':
        case 'a' ... 'z':
            printf("'%c' is a letter\n", ch);
            break;
        case '0' ... '9':
            printf("'%c' is a digit\n", ch);
            break;
        case '+':
        case '*':
        case '-':
        case '%':
        case '/':
        case '^':
            printf("'%c' is a math operator\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);
    }
}
问题只是关于陈述案件的正确方式。 该代码需要采用c89标准

在标准C中,每种情况只有1个常量。在C89中不使用//注释

switch(carrier[i]) {
  case `+`: /* Fall through */  /*Comment not required, but good style */
  case `=`: 
    /* case 1 code here */
    break;
  case '.' : 
    if(deccase == closed) ...
    break;
  case '0' : /* Fall through */
  case '1' : /* Fall through */
  case '2' : /* Fall through */
  case '3' : /* Fall through */
  case '4' : /* Fall through */
  case '5' : /* Fall through */
  case '6' : /* Fall through */
  case '7' : /* Fall through */
  case '8' : /* Fall through */
  case '9' : 
    /* case 3 */
    ...
    break;
  case ' ':
    printf("staring with whitespace\n");
    break;
  default:
    printf("empty\n");
    break;
}
问题只是关于陈述案件的正确方式。 该代码需要采用c89标准

在标准C中,每种情况只有1个常量。在C89中不使用//注释

switch(carrier[i]) {
  case `+`: /* Fall through */  /*Comment not required, but good style */
  case `=`: 
    /* case 1 code here */
    break;
  case '.' : 
    if(deccase == closed) ...
    break;
  case '0' : /* Fall through */
  case '1' : /* Fall through */
  case '2' : /* Fall through */
  case '3' : /* Fall through */
  case '4' : /* Fall through */
  case '5' : /* Fall through */
  case '6' : /* Fall through */
  case '7' : /* Fall through */
  case '8' : /* Fall through */
  case '9' : 
    /* case 3 */
    ...
    break;
  case ' ':
    printf("staring with whitespace\n");
    break;
  default:
    printf("empty\n");
    break;
}

+| |-和“[0-9]”都无效。您需要分别检查每个值。这就是switch/case的工作原理。您可以使用case'+':case'-':带有单引号和重复的case。如果你想从零到九,你必须用大写字母“0”写出它:大写字母“1”:……:大写字母“9”:。在任何版本的C中都没有可用的速记。@JonathanLeffler GCC允许大小写范围:@qrdl OP的代码必须在c89标准中,并且GCC扩展不在c89或任何标准C中。+| |-和“[0-9]”都无效。您需要分别检查每个值。这就是switch/case的工作原理。您可以使用case'+':case'-':带有单引号和重复的case。如果你想从零到九,你必须用大写字母“0”写出它:大写字母“1”:……:大写字母“9”:。在任何版本的C中都没有可用的速记。@JonathanLeffler GCC允许大小写范围:@qrdl OP的代码需要在c89标准中,GCC扩展不在c89或任何标准C中。。。。由于开关盒范围是一个扩展,使用它们与OP使用符合C89标准的代码的要求不一致。。。。由于开关盒范围是一个扩展,使用它们与OP要求使用符合C89标准的代码不一致。