2013-08-27 98 views
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; 
} 

雖然我編譯這段代碼,它堅持與此錯誤:EOF警告:多字符常量[-Wmultichar]

warning: multi-character character constant [-Wmultichar]

我們怎樣才能在switch使用EOF?

+2

案例EOF沒有科茨 –

+0

'EOF' 不是一個標籤,'之開關需要一個數字標籤,'EOF'意味着-1最system.So變 'EOF' 來-1或EOF。 – MYMNeo

回答

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; 
} 
10

你必須在EOF情況下,一個小錯誤 - 你需要改變:

case 'EOF': 

到:

case EOF: 

之後更改代碼應編譯和運行,但爲了它要正確運行,您需要在每個案例的末尾添加一條break;行。

1

您正在使用'EOF'來表示文件結尾。實際的表現是EOF不斷

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

它在stdio.h中定義

2

變化:

case 'EOF': 

到:

case EOF: 

而且每個案件後添加break;

0

沒有字符符號'EOF'。在標準的C庫中,EOF是一個預定義的常量。它的價值因系統而異。所以,你的情況,你應該改變EOF比較一部分是這樣的:

... 
case EOF: 
     till = 1; 
} 
1

你也可以做以下的事情:

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

EOFint類型的宏定義。

相關問題