基于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; }
关键部分说明
- 栈存储结构:用数组
stack模拟栈,stack[0]对应界面上的01位,stack[1]对应02位,以此类推,最多存储10个数字。 - 元素移动逻辑:每次输入新数字后,从数组最后一位(索引9)开始,把前一位的值赋给当前位,直到索引1,这样所有已有元素都后移一位,最后把新数字放到索引0的位置。
- 位置控制:
gotoxy(x,y)的参数是列号和行号,比如位置标识放在第1列,数字放在第8列,行号从2开始依次往下对应01到10位。 - 界面优化:未使用的位置打印空格清空,避免残留旧数据;输入提示固定在顶部,不干扰栈的显示。
运行效果
- 输入50按回车:50出现在01位
- 输入20按回车:20出现在01位,50移到02位
- 继续输入数字,新数字始终在01位,旧数字依次上移,超过10位时最老的数字被丢弃
内容的提问来源于stack exchange,提问作者Jackspyro
相关产品推荐
相关产品推荐

