读取数据构建双权重邻接表时循环卡死问题求助
问题分析与解决
你的代码卡在cin输入处,大概率是以下两种情况导致:
1. 输入未正确结束
当你在终端手动输入数据时,程序会持续等待输入,直到你明确告知输入完成:
- Windows系统:输入完所有数据后,按
Ctrl+Z再按回车 - Linux/macOS系统:输入完所有数据后,按
Ctrl+D
如果是通过文件重定向输入,要确保文件内容完全匹配给定格式,没有缺失或多余的行。
2. 输入过程中cin进入失败状态
若输入的数据格式不符合要求(比如混入非数字字符),cin会进入失败状态,后续读取操作都会直接失效,导致循环无法正常终止。可以在读取后检查cin状态,及时中断异常循环:
修改readNetwork函数如下:
void readNetwork(vector<vector<Road>> &adjList) { if (!(cin >> N >> M >> T)) { cerr << "输入N/M/T失败" << endl; return; } adjList.resize(N); for (int i = 0; i < M; i++){ int x, y, l, c; if (!(cin >> x >> y >> l >> c)) { cerr << "第" << i+1 << "条边输入失败" << endl; break; } adjList[x].push_back({y,l,c}); } }
额外调试建议
可以在循环中添加输出语句,直观确认每一次读取的执行情况:
for (int i = 0; i < M; i++){ int x, y, l, c; cout << "读取第" << i+1 << "条边:" << endl; cin >> x >> y >> l >> c; cout << "结果:" << x << " " << y << " " << l << " " << c << endl; adjList[x].push_back({y,l,c}); }
内容的提问来源于stack exchange,提问作者Floor
相关产品推荐
相关产品推荐

