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

C语言栈实现十进制转二进制程序卡顿,仅终止时输出的问题

问题分析与修复:栈实现十进制转二进制程序卡顿问题

核心问题:输入阻塞的原因

程序卡顿的根源是scanf("%d ",&num);这行代码中,%d后面多了一个空格。scanf遇到格式字符串里的空白字符(空格、换行、制表符等)时,会持续跳过输入中的所有空白内容,直到读取到非空白字符才会停止。这就导致你输入数字并按下回车后,程序会一直等待更多非空白输入,只有终止程序时scanf才会结束等待,后续代码才得以执行。

修复步骤

  1. 移除scanf格式字符串的空格:将scanf("%d ",&num);改为scanf("%d", &num);,输入数字后按回车即可触发后续逻辑。
  2. 处理输入为0的特殊情况:原代码中num<=1时直接push(1),但输入0的话二进制应为0,需单独处理。
  3. 规范main函数写法:C标准中main函数返回类型应为int,结尾需添加return 0;。

修复后的完整代码

#include<stdio.h>
int binstack[10];
int top = -1;
int num;

void push(int x){
    top = top + 1;
    binstack[top] = x;
}

void pop(){
    printf("%d", binstack[top]);
    top = top - 1;
}

void binary(){
    printf("enter the number: ");
    scanf("%d", &num);
    
    // 处理输入为0的特殊情况
    if (num == 0) {
        push(0);
        return;
    }
    
    while(num > 1){       
        int rem = num % 2;
        push(rem); // 直接push余数,简化判断逻辑
        num = num / 2;        
    }
    push(num); // 最后剩余的1直接入栈
}

int main(){
    binary();
    while(top != -1){
        pop();
    }
    printf("\n"); // 输出后换行,格式更整洁
    return 0;
}

额外优化说明

  • 原代码中判断余数再push的逻辑可简化,直接push余数即可(余数本身就是0或1)。
  • 移除了未使用的全局变量quo和rem,减少冗余。
  • 添加换行输出,让结果显示更规范。

内容的提问来源于stack exchange,提问作者user20414330

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 14:05:34