C语言数组无法正确展示用户输入值问题求助
问题排查与解决方案
嘿,我一眼就找到你代码里的问题啦!你的程序之所以只显示最后一次输入的值,核心问题出在数组下标变量的错误使用上,具体有两个关键问题:
1. 未初始化的变量n导致下标异常
你声明了int n, i;但从未给n赋值,局部变量在未初始化时会包含内存里的随机垃圾值。在你的运行场景中,这个随机值刚好固定指向了数组的某一个位置(比如data[2]),所以每次调用scanf("%d",&data[n]);时,新输入的值都会覆盖同一个数组元素,最后自然只剩下最后一次输入的1。
2. 循环中错误使用n作为数组下标
不管是读取输入还是输出数组内容,你都误用了n作为下标,但循环的控制变量是i呀!你应该用i来遍历数组的每个位置,这样才能依次把输入存入data[0]、data[1]、data[2],输出时也能逐个取出对应位置的值。
修正后的代码
#include <stdio.h> #define MAXSIZE 3 int main (void) // 注意:main的标准返回类型是int,不是void { int data[MAXSIZE]; int i ; // 不需要n了,直接用i作为下标 for (i = 0;i < MAXSIZE ;i++ ) { printf("Enter array [%d]: ",i+1); scanf("%d",&data[i]); // 这里改成data[i] } printf("data before sort\n"); printf("===================\n"); for (i = 0; i < MAXSIZE ;i++ ) printf("Value[%d]:%d\n",i+1,data[i]); // 这里也改成data[i] return 0; // 标准main需要返回值 }
额外小提醒
- C语言中局部变量默认不会初始化,使用未初始化的变量会导致未定义行为,结果可能每次运行都不一样,一定要记得初始化变量或者按需赋值。
main函数的标准返回类型是int,建议遵循这个规范,最后加上return 0;表示程序正常结束。
内容的提问来源于stack exchange,提问作者youssef abd elhakem
相关产品推荐
相关产品推荐

