开关-如何检查空白?

时间:2018-10-08 09:52:37

标签: c

我有以下代码:

#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 个答案:

答案 0 :(得分:5)

首先,您发布的原始代码无法正常工作,它不是有效的C。

switch语句仅适用于整数,因此必须使用适当的字符常量,例如' '。而不是字符串文字" "。示例:

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

  default:
    puts("not whitespace");
}

话虽如此,没有必要手动推出类似的东西。 #include <ctype.h>,然后调用函数isspace

答案 1 :(得分:4)

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

要获取文字字符,请改为使用单引号,例如' '

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

现在,当您知道如何使用文字字符时,可以在switch标签中的case内使用它们。

但是,当然,不要重新发明轮子,而是使用标准的isspace函数:

if (isspace(c))