2011-08-24 5 views
4

이 퍼즐을 발견했습니다 here. 왜 NONE가 인쇄되지 않는지 알 수 없습니다. 어떤 아이디어? defa1ut 만약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

@Henning - 아니오, 그렇지 않습니다. 'defa1ut'라고 쓰여 있습니다. 누군가가이 수수께끼에서 퍼즐을 일시적으로 편집 한 것처럼 보입니다. – Flexo

+0

@awoodland : 질문을 보았을 때 - 누군가가 질문을 편집하여 "기본값"으로 수정 한 적이 없었습니다. :-( –

+0

멍청한데 ... 그 해결책은 – tipycalFlow

3

default에 대한 오타이며, 문자열 "None"이 인쇄되지 않습니다 : '1'1이 다르기 때문에

이입니다.

'1'은 십진수 값이 49 인 문자 '1'의 ASCII 값을 의미합니다. 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 문으로 해결해야 다릅니다.