C语言数组存储问题:仅首个输入有效,求后续输入失效排查建议
问题排查与修复方案
核心问题梳理
变量声明错误:
arr[size];缺少类型声明,C语言要求必须明确变量类型,应改为int arr[size];input;同样未声明类型,需写成int input;
unique函数逻辑完全失效:- 函数中多余的
scanf("%d",&n);会错误读取输入覆盖循环变量,直接打乱重复检查逻辑,必须删除 else分支的n=1; break;是致命问题:这导致每次仅检查数组第一个元素,只要和输入不等就直接终止检查,完全不会遍历前面所有已存入的元素,后续重复值根本检测不出来- 循环遍历逻辑错误,没有覆盖所有已存储的元素范围
- 函数中多余的
其他语法规范问题:
main函数未声明返回类型,标准C要求写成int main(),且末尾需添加return 0;unique函数定义在main之后但未提前声明,会触发编译错误,需在main前添加函数声明
修正后的完整代码
#include<stdio.h> #define size 5 // 提前声明unique函数,解决编译未定义问题 int unique(int arr[], int input, int current_index); int main() { int i; int arr[size]; // 补全数组类型声明 int input; // 补全变量类型声明 printf("This program will accept unique inputted numbers that will be stored in an array\n"); for(i = 0; i < size; i++) { printf("Enter input: "); scanf("%d", &input); if (unique(arr, input, i)) arr[i] = input; else i--; // 输入重复,回退索引重新获取输入 } // 输出最终存储的唯一数组元素 printf("Unique numbers in array: "); for(i = 0; i < size; i++) printf("%d ", arr[i]); return 0; // 符合标准main函数返回要求 } int unique(int arr[], int input, int current_index) { int n; // 遍历所有已存入的元素(索引0到current_index-1) for(n = 0; n < current_index; n++) { if(arr[n] == input) { printf("Number already exists! Please re-enter.\n"); return 0; // 发现重复,返回0 } } return 1; // 无重复,返回1 }
修正说明
- 补全所有缺失的变量类型声明,符合C语言语法规范
- 重写
unique函数逻辑:通过for循环遍历当前已存入的所有元素,只要发现重复立即返回0;遍历完成无重复则返回1 - 添加重复输入提示,提升用户交互体验
- 修正
main函数的返回类型与返回值,符合标准C要求 - 添加函数前置声明,解决编译阶段的函数未定义错误
内容的提问来源于stack exchange,提问作者Jauny
相关产品推荐
相关产品推荐

