需要帮助解决基于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警告。
如果defa1ut
是default
的拼写错误,则打印字符串“NONE”:
这是因为'1'
和1
是不同的。
'1'
表示字符'1'
的ASCII值,其十进制值为49
。 1
是整数。
如果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
语句进行处理。
为什么你认为应该打印?
defa1ut
与default
不同