C++输入数组求最大最小值输出异常值问题排查
异常问题原因分析
导致你代码运行结果异常的核心原因有两个:
- 输入元素未存入目标数组
你第一段异常代码的输入循环中,仅将用户输入的值存入了临时变量a,完全没有赋值给array[i]。你声明的array数组从未被初始化,存储的是栈内存中的随机垃圾值,因此最终遍历计算的最大最小值都是无意义的随机数,和你输入的数值无关。 - 使用了非标准C++语法
C++标准不支持int array[n]这种用变量定义栈数组长度的写法(即可变长度数组VLA),这只是部分编译器(如GCC)提供的非标准扩展,可移植性极差。
你提供的第二段参考代码可以正常运行,是因为数组在声明时就显式初始化了所有元素,不存在未初始化读的问题,所以计算结果符合预期。
修正后的代码示例
#include<iostream> #include<vector> // 推荐使用标准库容器替代可变长度数组 using namespace std; int main() { int n; cout<<"input length of array = "; cin>>n; vector<int> array(n); // 用vector实现动态长度数组,符合C++标准 for(int i=0; i<n;i++) { cout<<"input element "<<i+1<<" = "; cin>>array[i]; // 直接将输入值存入数组对应位置 } int max=array[0]; int min=array[0]; for(int i=0; i<n;i++) { if(array[i]>max) { max=array[i]; } if(array[i]<min) { min=array[i]; } } cout<<"max = "<<max<<endl; cout<<"min = "<<min; return 0; }
内容的提问来源于stack exchange,提问作者user15873758
相关产品推荐
相关产品推荐

