C++ 从多行输入多整数存入2d array,二维数组无法更新如何解决
问题原因
- stringstream初始化位置错误:你在循环外仅用初始的
input值初始化了一次s,后续循环中通过getline读取到的新行内容完全没有更新到s中。第一次循环读取完s内的所有内容后,s会进入EOF(文件结束)状态,后续所有循环中的s >> u >> v >> weight都会直接返回false,不会执行Graph数组的赋值逻辑,自然无法更新二维数组。 - 读取逻辑不匹配:你的外层循环本意是逐行读取输入内容,但现有逻辑没有将每行新读取的内容送入解析流,完全脱离了逐行读取的设计目标。
- 额外注意:需要确认
Graph数组的维度是否满足输入下标要求,你提供的输入中顶点下标最大值为5,因此Graph的行列数至少需要为6,否则下标越界也会导致赋值无效,同时要保证count的初始值为0。
修复后的代码
// 提前确认count初始值为0,Graph数组行列数≥6 while(count != numV){ getline(cin, input); stringstream s(input); // 每次用新读取的行内容初始化stringstream while(s >> u >> v >> weight) { Graph[u][v] = weight; } count++; }
核心修改说明
- 将
stringstream s的构造逻辑移动到getline之后,每次用刚读取到的一行输入内容初始化流对象,保证每次解析的是最新的输入行。 - 每次循环构造新的stringstream对象会自动重置流状态,不需要手动处理EOF标识,避免后续解析失败。
- 可选优化:如果输入存在空行或前置空白符,可在
getline前添加空白符跳过逻辑,避免解析异常
内容的提问来源于stack exchange,提问作者bahnaynays
相关产品推荐
相关产品推荐

