C++读取文件创建向量时城市数据无法正常存储的问题
ID匹配逻辑错误
读取城市数据时,若未正确匹配对应ID的人员对象,会导致城市数据无法关联到目标人员。比如:ID类型不匹配(文件中是字符串ID,代码用int存储)、遍历vector匹配ID时循环条件错误,都会让程序找不到对应人员,自然无法写入城市数据。
解决:确保城市行的ID类型与vector中人员的ID类型完全一致,遍历匹配时逻辑严谨,比如用for(auto& p : people)遍历,找到p.id == current_id的对象再操作。文件读取缓冲区残留问题
读完人数n和n行人员信息后,输入缓冲区可能残留换行符(比如用cin >> n读取后,换行符没被处理),导致后续读取城市数据时先读了空行,整体读取偏移,有效城市行被跳过。
解决:读取n后,用cin.ignore(numeric_limits<streamsize>::max(), '\n')清空缓冲区;或者统一用getline读取所有行,再拆分每行内容,避免混合读取的缓冲区问题。城市数据读取逻辑漏洞
读取城市数量后,循环读取城市的次数错误(比如循环条件写成i <= k而非i < k),或者城市名带空格时用cin >> city读取(会截断字符串,导致后续数据解析混乱),都会让城市数据读不进容器。
解决:确认循环次数严格等于城市数量;若城市名含空格,读取前先处理缓冲区的换行,再用getline读取完整城市名。人员对象的城市容器未正确操作
若人员类中存储城市的vector<string>被错误初始化或覆盖为空(比如匹配到人员后误写p.cities = {}),即使读取到城市也无法存储。
解决:检查人员类成员初始化逻辑,确保城市容器默认初始化,添加城市时使用push_back或emplace_back而非直接赋值为空。文件格式与代码预期不符
实际文件中城市行的格式可能不符合预期,比如ID后的城市数量和实际城市个数不匹配、行尾有多余空格/换行,导致解析时无法正确读取城市数据。
解决:打开文件核对每行格式,确保城市行严格遵循ID 城市数 城市1 城市2 ...的结构,与代码读取逻辑完全对应。
内容的提问来源于stack exchange,提问作者PandaMan -

