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

时间:2013-08-27 08:54:06

标签: c

#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]

我们如何在switch中使用EOF?

6 个答案:

答案 0 :(得分:10)

你在EOF案件中有一个小错误 - 你需要改变:

case 'EOF':

为:

case EOF:

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

答案 1 :(得分:2)

变化:

case 'EOF':

为:

case EOF:

在每个案例后添加break;

答案 2 :(得分: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;
}

答案 3 :(得分:1)

您正在使用'EOF'来表示文件结尾。实际表示是EOF常数

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

在stdio.h中定义

答案 4 :(得分:1)

您还可以执行以下操作:

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

EOF是类型int的宏定义。

答案 5 :(得分:0)

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

...
case EOF:
        till = 1;
}