You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 01:36:04