【发布时间】:2020-12-31 03:11:24
【问题描述】:
我们进行了各种各样的测验,并且有以下问题,我们必须在哪里找到错误,或者如果没有,则给出给定代码的输出:
#include <stdio.h>
int main(void) {
int n = 012;
b: printf("%d\n",n--);
if(n!=0){
n--;
goto b;
}
return 0;
}
理论上我看不出这有什么问题,但这会导致变量低于 0 的无限循环。谁能帮我解决这个问题?
【问题讨论】:
-
你学到了什么调试?您是否打算在两个地方减少
n? -
用纸和铅笔逐一检查代码并跟踪
n的值。只需一分钟。你会明白为什么测试n != 0不会停止循环。请注意,文字012是一个 八进制 值。 -
iteration 将为索引打印 n, 10,8,6,4,2,0 ,在 printf 中打印之后,我们将 n 减 1。当 n 到达 if 语句时,它将是 9, 7,5,3,1,-1。并且终止条件 n==0 永远不会命中。如果打算打印 "10,8,6,4,2,0 " ,请将终止条件从 " if(n!=0){ " 更改为 "if(n>0){"。
-
使用函数的早期返回,if 语句。有很多技术不需要
goto,我认为这些技术更容易确保代码正确。一个原因(恕我直言,一个非常好的原因)是回答“你是如何获得 goto 标签的?”这个问题在编写代码时可能很容易回答,但经过长时间的维护后,它变得更难检查。跨度>