for循环中能否嵌套while循环?C语言反转数字代码输出负数原因
问题解答
问题1:是否可以在for循环内部使用while循环?
可以。C语言完全支持循环嵌套语法,for循环、while循环、do-while循环之间可以任意互相嵌套,只要业务逻辑合理即可正常运行。
问题2:反转代码输出负数值的原因
出现异常输出是两个代码bug共同导致的整数溢出问题:
- 错误修改for循环控制变量
input:while循环内直接对for循环的迭代变量input做除法修改,会导致for循环永远无法满足input<=100的退出条件,程序进入死循环 - 反转存储变量
c未重置:c是全局定义的变量,每次处理新数字前没有重置为0,每次循环都会叠加之前的反转结果,数值持续增大超过int类型的最大取值范围后,发生有符号整数溢出,C语言中该行为属于未定义行为,因此会输出负数值或其他异常结果。
修正后的参考代码
#include<stdio.h> #include<stdlib.h> int main() { int input, x, c; for (input=1; input<=100; input++) { // 用临时变量存储待反转数值,不修改for循环控制变量 int temp = input; // 每次反转新数字前重置存储变量 c = 0; while(temp != 0) { x = temp%10; c = c*10 + x; temp = temp/10; } printf("Reverse Number of %d is : %d\n", input, c); } return 0; }
内容的提问来源于stack exchange,提问作者Bm Aravinthan
相关产品推荐
相关产品推荐

