水木社区上的一个兄弟找到的这个网页(http://www.gowrikumar.com/c/index.html),如果你自以为C学的够好了,那做一下这上面的题检验一下吧。

我没做几道,但下面这道题真让我……,找到答案时我禁不住“O...M...G...”了一声。

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


If you expect the output of the above program to be NONE, I would request you to check it 
out!!







提示

Posted on 2008-02-15 11:27 Soli 阅读(380) 评论(8)  编辑 收藏 所属分类: Programming

Feedback

#1楼    回复  引用    

2008-02-15 13:25 by sirsunny [未注册用户]
default?

#2楼    回复  引用  查看    

2008-02-15 14:11 by iRobot      
printf("NONE\n");
break;

#3楼    回复  引用    

2008-02-15 15:49 by j106039 [未注册用户]
hehe,misspelling......default

#4楼    回复  引用    

2008-02-15 16:10 by 眼镜店老板 [未注册用户]
defa1ut:
单词写错了吧?
如果这是原因,恐怕和语言没有什么关系。

#5楼    回复  引用    

2008-02-17 13:13 by 32454 [未注册用户]
case '1':

会被误认为是case 1:

是这里,a会备转换成对应的ascii码

#6楼 [楼主]   回复  引用  查看    

2008-02-17 21:52 by Soli      
@眼镜店老板
经过测试之后,问题确实是因为单词“defa1ut”拼写错误。
刚开始我也是不以为然,但仔细考虑后,这个错误是非常值得注意的,因为编译时不报错!这里的“defa1ut”成了个标号,并且它后面的代码永不可达。
想过之后,我真的后背一阵发冷。

#7楼    回复  引用    

2008-05-12 13:52 by ui [未注册用户]
记得一个书,好像是C专家编程 谈到bug时说到这个问题

#8楼 [楼主]   回复  引用  查看    

2008-05-12 23:47 by Soli      
@ui
恩,不错的一本书,很久以前看过.

如果你有这本书,我愿意出高价买哈,呵呵.