0
#include <stdio.h>
int main(void)
{
  int c, blank, tab, lines;
  int till = 0;
  blank = tab = lines = 0;
  while(till == 0)
    {
      c = getchar();
      switch(c)
    {
    case ' ' :
      blank++;
    case '\t' :
      tab++;
    case '\n' :
      lines++;
    case 'EOF' : /* warning: multi-character character constant [-Wmultichar] */
      till = 1;
    }
    }
  printf("Blanks :%d Tab :%d Lines :%d\n", blank, tab, lines);
  return 0;
}

当我编译这段代码时,它仍然存在这个错误:

警告:多字符字符常量 [-Wmultichar]

我们如何在 a 中使用 EOF switch

4

6 回答 6

10

您在 EOF 案例中有一个小错误 - 您需要更改:

case 'EOF':

至:

case EOF:

更改之后,代码应该编译并运行,但为了使其正确运行,您需要break;在每个案例的末尾添加一行。

于 2013-08-27T08:57:55.187 回答
2

改变:

case 'EOF':

至:

case EOF:

break;在每个案例之后添加。

于 2013-08-27T08:58:57.367 回答
2

尝试这个:

#include <stdio.h>

int main(void)
{
    int c, blank, tab, lines;
    int till = 0;
    blank = tab = lines = 0;
    while(till == 0)
    {
        c = getchar();
        switch(c)
        {
        case ' ' :
            blank++;
            break;
        case '\t' :
            tab++;
                    break;
        case '\n' :
            lines++;
            break;
        case EOF :
            till = 1;
            break;
        }
    }
    printf("Blanks :%d Tab :%d Lines :%d\n", blank, tab, lines);

    return 0;
}
于 2013-08-27T09:05:09.150 回答
1

您正在使用“EOF”来表示文件结束。实际表示是 EOF 常量

case EOF : /* warning: multi-character character constant [-Wmultichar] */
  till = 1;
}

它在 stdio.h 中定义

于 2013-08-27T08:58:53.343 回答
1

您还可以执行以下操作:

while ((c = getchar()) != EOF)
{
    switch (c)
    {
        /* case ' ', '\t', '\n' */
    }
}

EOF是 type 的宏定义int

于 2013-08-27T09:01:54.933 回答
0

没有字符符号'EOF'。在标准 C 库中,这EOF是一个预定义的常量。它的价值因系统而异。因此,在您的情况下,您应该将EOF比较部分更改为以下内容:

...
case EOF:
        till = 1;
}
于 2013-08-27T08:59:32.407 回答