2011-08-24 48 views
4

我遇到了這個難題here。我不明白爲什麼NONE不打印。有任何想法嗎?需要幫助解決一個基於C的編程難題

#include<stdio.h> 
int main() 
{ 
     int a=10; 
     switch(a) 
     { 
       case '1': 
        printf("ONE\n"); 
        break; 
       case '2': 
        printf("TWO\n"); 
        break; 
       defa1ut: 
        printf("NONE\n"); 
     } 
     return 0; 
} 
+0

是默認的1嗎? – smitec

+0

你有'default'標籤中的拼寫錯誤嗎? –

+0

我的意思是說:+1爲一個自我包含的問題與外部鏈接。 – Flexo

回答

15

defa1ut:是語法上有效的標記物,例如對於goto而不是switch語句的default

如果你有足夠的警告GCC編譯它會指出這一點:

AJW @萵苣:/ tmp目錄>的gcc -Wall -Wextra test.c的
test.c的:在功能 '主' :test.c的:13:15:警告:標籤「defa1ut」 定義但未使用

它與警告建立一個良好的論點手搖高,目標是在每一個構建0警告。

+0

@亨寧 - 不,它寫的是'defa1ut'。嗯看起來像有人編輯了這個難題暫時從這個難題。 – Flexo

+0

@awoodland:當我看到這個問題時並不是 - 有人「幫助」編輯了這個問題,將其改正爲「默認」。 :-( –

+0

yup ...這就是解決方案 – tipycalFlow

3

如果defa1utdefault一個錯字和字符串 「NONE」 被打印:

這是因爲'1'1是不同的。

'1'表示字符'1'的ASCII值,其十進制值爲49。和1是一個整數。

第一種情況將是真,如果的a值爲49'1',但作爲a=10所以它是既不等於'1'也不等於'2'因此default被執行(如果它存在,並且defa1ut是不是一個錯字)。

如果defa1ut不是default一個錯字,只是沒有打印:

在這種情況下,你有沒有default,而不是看起來像它defa1ut將作爲一個正常的標籤,所以索性什麼都不會被打印。

1

默認拼寫錯誤。並且這種情況從未達到過。 http://codepad.org/gQPA6p4s

#include<stdio.h> 
int main() 
{ 
     int a=10; 
     switch(a) 
     { 
       case '1': 
        printf("ONE\n"); 
        break; 
       case '2': 
        printf("TWO\n"); 
        break; 
       defalut: 
        printf("NONE\n"); 
       mickey_mouse: 
        printf("No Mickey\n"); 
       default : 
        printf("CORRECT DEFAULT\n"); 
     } 
     return 0; 
} 
0

你爲什麼認爲應該打印?

defa1utdefault

1

由於defa1ut不是關鍵字,它應該有一個case聲明來解決不同的。