代码之家  ›  专栏  ›  技术社区  ›  zinon

开关-如何检查空白?

c
  •  1
  • zinon  · 技术社区  · 6 年前

    我有以下代码:

    #include <stdio.h>
    #define WHITE_SPACE 0
    #define NOT_WHITE_SPACE 1
    
    void main() {
    
        char c;
        int code;
    
        printf("Please give a character: ");
        scanf("%c", &c);
    
        if (c== " " ||  c== "\n" || c== "\t")
                code = WHITE_SPACE;
        else:
                code = NOT_WHITE_SPACE;
        }
    
        printf("%d\n", code);
    
    }
    

    if-else 对帐单 switch

    case " " case "\n" case "\t" ,我要走了 error case label does not reduce to an integer constant . 你知道怎么修吗?

    2 回复  |  直到 6 年前
        1
  •  4
  •   Some programmer dude    6 年前

    文字字符串,例如。 " " 实际上是一个 数组 (只读)字符。与其他数组一样,它衰减为指向其第一个元素的指针。这意味着 c == " " 将比较 c 指针 " " .

    ' ' :

    if (c== ' ' ||  c== '\n' || c== '\t')
    

    现在,当您知道如何使用文字字符时,就可以在 switch case 标签。

    但当然,不要重新发明轮子,使用标准 isspace

    if (isspace(c))
    
        2
  •  5
  •   Lundin    6 年前

    首先,您发布的原始代码是不可能工作的,它不是有效的C。

    switch ' ' . 而不是字符串 " " . 例子:

    switch(ch)
    {
      case ' ':
      case '\n':
      case '\t':
        puts("whitespace");
      break;
    
      default:
        puts("not whitespace");
    }
    

    也就是说,没有必要手动推出这样的东西。 #include <ctype.h> isspace 相反。