C#技术求助:如何实现数组依次存储用户输入值而非覆盖slot 0
解决数组输入值反复覆盖第一个位置的问题
我明白你的问题了——每次用户输入值都被存在数组的第一个位置,完全覆盖了之前的内容,而你想要的是每次输入都依次存在下一个空位置,输完就回到主菜单,下次输入自动用下一个slot。这问题其实很常见,根源就是你没跟踪当前该存到哪个索引位置~
核心问题分析
你当前的代码应该是固定使用索引0来存储输入值,比如每次都写array[0] = 输入值,自然每次都会覆盖第一个位置。要实现依次存储,你需要一个变量来记录「下一个要存储的数组位置」。
解决方案步骤
- 新增索引跟踪变量:定义一个比如叫
currentIndex的变量,初始值设为0,它代表下一个要存储值的数组索引。 - 存储值后更新索引:当用户输入值并存储到
array[currentIndex]后,把currentIndex加1,这样下次就会自动指向数组的下一个空位置。 - 增加数组边界检查:避免数组存满后继续输入导致越界错误,先判断
currentIndex是否小于数组长度,再执行存储操作。
代码示例(以C语言为例)
错误代码(问题重现)
#include <stdio.h> int main() { int arr[5]; int choice, value; while(1) { printf("主菜单:\n1. 输入值\n2. 查看数组\n3. 退出\n"); scanf("%d", &choice); switch(choice) { case 1: printf("请输入值:"); scanf("%d", &value); arr[0] = value; // 固定存到索引0,每次覆盖 break; case 2: printf("数组内容:"); for(int i=0; i<5; i++) { printf("%d ", arr[i]); } printf("\n"); break; case 3: return 0; default: printf("无效选项!\n"); } } }
修改后的正确代码
#include <stdio.h> int main() { int arr[5]; int choice, value; int currentIndex = 0; // 新增:跟踪当前存储的位置 while(1) { printf("主菜单:\n1. 输入值\n2. 查看数组\n3. 退出\n"); scanf("%d", &choice); switch(choice) { case 1: // 先检查数组是否已满 if(currentIndex >= 5) { printf("数组已满,无法再输入新值!\n"); break; } printf("请输入值:"); scanf("%d", &value); arr[currentIndex] = value; // 存到当前索引位置 currentIndex++; // 索引后移,下次存下一个位置 printf("值已存入数组第%d个位置,返回主菜单\n", currentIndex-1); break; case 2: printf("数组已存储的内容:"); for(int i=0; i<currentIndex; i++) { // 只打印已存入的有效内容 printf("%d ", arr[i]); } printf("\n"); break; case 3: return 0; default: printf("无效选项,请重新选择!\n"); } } }
关键改进点
currentIndex的使用:每次存储后自增,确保下次输入自动指向空的数组位置- 数组满的判断:防止越界访问,提升程序健壮性
- 查看逻辑优化:只遍历到
currentIndex,避免打印未初始化的垃圾值
内容的提问来源于stack exchange,提问作者Strayph
相关产品推荐
相关产品推荐

