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

基于Stack的C语言10位计算器开发求助:入栈位置更新问题

10位栈式计算器实现方案(带位置控制)

核心思路

每次输入新数字时,将栈内已有的所有元素从后往前依次后移一位(最老的元素超过10位则自动丢弃),新数字放在最顶部的01位,再通过gotoxy逐个定位到对应位置打印。

完整可运行代码

#include <stdio.h>
#include <stdlib.h>

// 跨平台实现gotoxy
#ifdef _WIN32
#include <conio.h>
#else
void gotoxy(int x, int y) {
    printf("\033[%d;%dH", y, x);
}
#endif

#define STACK_SIZE 10  // 栈的最大容量10位

int main() {
    int stack[STACK_SIZE] = {0};  // 存储栈内数字,stack[0]对应01位,stack[1]对应02位...
    int input_num;
    int i;

    // 初始化界面,打印位置标识
    for (i = 0; i < STACK_SIZE; i++) {
        gotoxy(1, i + 2);  // 位置标识在第1列,行号从2开始
        printf("0%d位:", i + 1);
    }

    while (1) {
        gotoxy(1, 1);  // 输入提示固定在第1行
        printf("请输入数字(输入-1退出):");
        scanf("%d", &input_num);

        if (input_num == -1) {
            break;
        }

        // 1. 将现有元素后移一位(从最后一位往前处理,避免覆盖)
        for (i = STACK_SIZE - 1; i > 0; i--) {
            stack[i] = stack[i - 1];
        }
        // 2. 新数字放入01位(stack[0])
        stack[0] = input_num;

        // 3. 逐个定位打印每个位置的数字
        for (i = 0; i < STACK_SIZE; i++) {
            gotoxy(8, i + 2);  // 数字打印在第8列,对应位置标识的右侧
            if (stack[i] != 0 || i == 0) {  // 01位即使是0也打印,其他位未使用时显示空白
                printf("%-5d", stack[i]);
            } else {
                printf("     ");  // 未使用的位置清空旧数据
            }
        }
        fflush(stdout);  // 强制刷新输出缓冲区,确保界面实时更新
    }

    gotoxy(1, STACK_SIZE + 3);
    printf("程序退出\n");
    return 0;
}

关键部分说明

  1. 栈存储结构:用数组stack模拟栈,stack[0]对应界面上的01位,stack[1]对应02位,以此类推,最多存储10个数字。
  2. 元素移动逻辑:每次输入新数字后,从数组最后一位(索引9)开始,把前一位的值赋给当前位,直到索引1,这样所有已有元素都后移一位,最后把新数字放到索引0的位置。
  3. 位置控制:gotoxy(x,y)的参数是列号和行号,比如位置标识放在第1列,数字放在第8列,行号从2开始依次往下对应01到10位。
  4. 界面优化:未使用的位置打印空格清空,避免残留旧数据;输入提示固定在顶部,不干扰栈的显示。

运行效果

  • 输入50按回车:50出现在01位
  • 输入20按回车:20出现在01位,50移到02位
  • 继续输入数字,新数字始终在01位,旧数字依次上移,超过10位时最老的数字被丢弃

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:05:27