C++向两个数组同下标存值时两数组均仅存第二个输入值如何解决
错误核心原因
- 数组定义的顺序完全错误:你在
N还没有通过cin赋值的前提下,就用N作为长度定义了数组K和P。此时N是未初始化的随机垃圾值,数组实际分配的长度和你后续输入的N完全不匹配,循环写入数据时发生了栈内存越界,数据互相覆盖才会出现两个数组都只存了第二个输入值的异常表现。 - 变长数组(VLA,即用变量作为数组长度定义栈数组)不属于标准C语法,仅部分编译器(如GCC)做了扩展支持,正规C项目中不建议使用这种写法。
修复代码方案
方案1(仅兼容支持VLA扩展的编译器)
调整数组定义的顺序,放在N赋值之后即可:
int N; cin >> N; int K[N], P[N]; for(int i=0; i<N;i++) { cin >> K[i] >> P[i]; }
方案2(标准C++通用写法,兼容性最好)
使用标准库的std::vector动态数组实现需求,安全性更高:
#include <iostream> #include <vector> using namespace std; int main() { int N; cin >> N; vector<int> K(N), P(N); for(int i = 0; i < N; i++) { cin >> K[i] >> P[i]; } // 后续业务逻辑 return 0; }
内容的提问来源于stack exchange,提问作者coderjohn69
相关产品推荐
相关产品推荐

