C++读取countries.txt文件,求助实现输出最小面积国家
实现最小面积国家的输出功能
要完成最小面积国家的输出,核心是解决最小面积初始值的初始化问题——不能像最大面积那样设为0(因为所有国家的陆地面积都是正数,0会比实际面积小,导致最小面积永远不会被更新)。以下是修改后的完整代码:
#include <iostream> #include <fstream> #include <string> #include <climits> // 新增:用于获取int类型的最大值INT_MAX using namespace std; int main() { ifstream ins; // 声明输入文件流对象 ins.open("/Users/daneided/Desktop/countries.txt"); // 打开文件 if (ins.fail()) { // 检查文件是否打开失败 cout << "Error opening file"; return -1; } string biggestCountry; // 存储最大面积国家名称 int biggestArea = 0; // 存储最大面积 // 新增:存储最小面积国家的变量 string smallestCountry; int smallestArea = INT_MAX; // 初始化为int的最大值,确保第一个国家的面积一定会更新它 for (int i = 0; i < 5; i++) { // 读取文件中的5行数据 string countryName; int area; ins >> countryName >> area; // 读取一行中的国家名称和面积 // 更新最大面积逻辑(保留原有代码) if (area > biggestArea) { biggestArea = area; biggestCountry = countryName; } // 新增:更新最小面积逻辑 if (area < smallestArea) { smallestArea = area; smallestCountry = countryName; } } ins.close(); // 关闭文件 // 输出最大面积国家(保留原有代码) cout << "Biggest country is: " << biggestCountry << " (" << biggestArea << ") " << endl; // 新增:输出最小面积国家 cout << "Smallest country is: " << smallestCountry << " (" << smallestArea << ") " << endl; return 0; }
关键修改说明:
- 添加
<climits>头文件:用来获取INT_MAX,这是int类型能存储的最大值,确保第一个读取到的国家面积一定会比它小,从而完成第一次最小面积的初始化。 - 新增最小面积相关变量:
smallestCountry存储国家名称,smallestArea存储面积,初始值设为INT_MAX。 - 循环内添加最小面积判断:每次读取国家数据后,对比当前面积与
smallestArea,如果更小则更新变量。 - 添加最小国家的输出语句:在原有输出后,新增最小国家的信息打印。
额外优化建议:
当前代码用固定次数的for循环读取5行数据,如果countries.txt中的国家数量发生变化,代码会失效。可以把循环改成自动读取直到文件结束:
// 替换原有的for循环 string countryName; int area; while (ins >> countryName >> area) { // 这里保留原有的最大、最小面积判断逻辑 }
这样无论文件里有多少个国家数据,代码都能正确处理。
内容的提问来源于stack exchange,提问作者sqw wsq
相关产品推荐
相关产品推荐

