需要帮助解决基于C的编程难题

我在这里遇到了这个难题。 我无法弄清楚为什么没有打印。 有任何想法吗?

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

defa1ut:是一个语法上有效的标签,例如对于goto而不是switch语句的default

如果使用gcc编译并提供足够的警告,则会指出这一点:

ajw @ rapunzel:/ tmp> gcc -Wall -Wextra test.c
test.c:在函数’main’中:test.c:13:15:警告:标签’defa1ut’已定义但未使用

这是一个很好的论据,可以建立警告,并在每个构建中针对0警告。

如果defa1utdefault的拼写错误,则打印字符串“NONE”:

这是因为'1'1是不同的。

'1'表示字符'1'的ASCII值,其十进制值为491是整数。

如果a值为49'1' ,则第一种情况为真,但是当a=10 ,它既不等于'1'也不等于'2' ,因此default执行(如果存在, defa1ut不是一个错字)。

如果defa1ut不是default的拼写错误,则不打印任何内容:

在这种情况下,您没有default而是看起来像defa1ut ,它将作为普通标签,因此根本不会打印任何内容。

默认拼写错误。 所以永远不会达到这种情况。 http://codepad.org/gQPA6p4s

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

由于defa1ut不是关键字,因此应使用case语句进行处理。

为什么你认为应该打印?

defa1utdefault不同