You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 09:48:15