2011-08-24 52 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声明来解决不同的。