如何使用循环从文件中读取数据并查找id的最大和最小值
问题原因
你的代码核心问题是使用了else if串联最大、最小id的判断逻辑,两个判断不是独立执行的:当某条id满足大于当前最大值的条件时,程序就会跳过最小id的判断分支,不会将该id和当前最小值做比较。
举个最简单的场景:如果读取的id序列是10, 20, 30, 40(所有id递增),那么每次循环都会命中id > largestId的分支,永远不会执行最小id的判断,smallestId会一直停留在初始的99999,不会更新为实际的最小值10。
修复方案
把else if改为独立的if语句,保证每次循环都会同时判断最大、最小值。同时建议不要写死初始值,避免id取值范围超出预设初始值的问题:
// 可引入头文件#include <limits>使用类型极限值做初始化,适配所有合法id范围 int largestId = std::numeric_limits<int>::min(); int smallestId = std::numeric_limits<int>::max(); while(theFile >> firstName >> lastName >> id) { if(id > largestId){ largestId = id; } if(id < smallestId){ smallestId = id; } }
如果你不想引入额外头文件,也可以在第一次读取到id的时候同时给两个变量赋值:
bool isFirst = true; int largestId, smallestId; while(theFile >> firstName >> lastName >> id) { if(isFirst){ largestId = id; smallestId = id; isFirst = false; continue; } if(id > largestId){ largestId = id; } if(id < smallestId){ smallestId = id; } }
内容的提问来源于stack exchange,提问作者Hozaifa Owaisi
相关产品推荐
相关产品推荐

