C语言整数反转程序输入数字后无响应不终止问题排查
问题相关代码
#include <stdio.h> int reverse(int ); int main() { int num,rem,r; printf("Enter a number:"); scanf("%d",&num); r=reverse(num); r=reverse(num); return 0; } int reverse(int num) { int rem,rev=0; while(num>=0) { rem=num%10; rev=rev*10+rem; num=num/10; } return rev; }
*注:原代码main()行尾多了一个误输入的反引号,属于书写笔误,不影响编译逻辑。
问题表现
代码可以正常编译通过,运行后会提示用户输入数字,用户输入完成后程序直接停滞,既无输出内容,也不会正常终止。
根因定位
程序卡死的核心原因是reverse函数内的循环条件错误,触发了死循环:
- 循环判断条件写为
while(num>=0),当用户输入正整数时,循环内每次执行num = num / 10做整数截断除法,当num被逐位除到0时,0 >= 0的判断仍然成立,会继续进入循环。 - 进入循环后,
0%10结果为0,0/10的计算结果仍然是0,num的值永远停在0,永远满足循环判断条件,无法退出循环,程序就会一直卡在这里运行。 - 额外逻辑缺陷:代码中没有编写反转结果的打印逻辑,就算修复死循环问题,运行后也不会输出计算结果;同时存在两次重复调用
reverse函数的冗余代码。
修复方法
- 将
reverse函数的循环条件从while(num>=0)修改为while(num>0),当num被逐位处理到0时自动退出循环,避免死循环。 - 删除main函数定义行尾多余的误输入字符,删除重复的reverse调用。
- 补充结果打印逻辑,添加
printf("Reversed number: %d\n", r);输出反转后的结果。
修复后的可正常运行代码参考:
#include <stdio.h> int reverse(int ); int main() { int num, r; printf("Enter a number:"); scanf("%d",&num); r = reverse(num); printf("Reversed number: %d\n", r); return 0; } int reverse(int num) { int rem, rev = 0; while(num > 0) { rem = num % 10; rev = rev * 10 + rem; num = num / 10; } return rev; }
内容的提问来源于stack exchange,提问作者Gayathri Dinesh
相关产品推荐
相关产品推荐

