如何重构C++文件整数排序状态检测代码使其可正常运行
原有代码核心问题
- 变量名冲突:文件流对象与排序判断的bool变量重名,直接编译报错
- 逻辑错位:调用
std::is_sorted时传入了文件名字符串的迭代器,本质是判断文件名的字符是否有序,和文件内存储的整数完全无关 - 循环条件错误:
while (resultat.eof())表示只有文件读取结束才会进入循环,核心逻辑完全无法执行 - 缺少存储容器:没有将文件读取的整数存入序列容器,无法判断整体整数序列是否有序
- 语法与扩展性问题:函数声明返回
int但无返回值,文件名硬编码为"A",且未做文件打开失败的异常处理
重构后代码
1. 头文件 SortingFunc1.h
#ifndef SORTING_FUNC1_H #define SORTING_FUNC1_H #include <string> // 功能:判断指定文件内的整数是否按升序排列 // 参数:in_file_name 待检测的文件路径 // 返回值:-1 文件打开失败;0 整数未排序;1 整数已排序 int file_sort_checker(const std::string& in_file_name); #endif
2. 函数实现文件 SortingFunc1.cpp
#include <iostream> #include <fstream> #include <vector> #include <algorithm> #include "SortingFunc1.h" int file_sort_checker(const std::string& in_file_name) { std::ifstream in_file(in_file_name); // 处理文件打开失败的情况 if (!in_file.is_open()) { std::cout << "文件打开失败,请检查路径是否正确" << std::endl; return -1; } std::vector<int> nums; int temp_num; // 读取文件中所有整数存入vector while (in_file >> temp_num) { nums.push_back(temp_num); } in_file.close(); // 空文件或只有一个数默认视为已排序 if (nums.size() <= 1) { std::cout << "Filen är sorterad!" << std::endl; return 1; } // 判断整数序列是否升序排列 bool is_sorted_flag = std::is_sorted(nums.begin(), nums.end()); if (is_sorted_flag) { std::cout << "Filen är sorterad! 总整数个数:" << nums.size() << std::endl; return 1; } else { std::cout << "Filen är inte sorterad! 总整数个数:" << nums.size() << std::endl; return 0; } }
3. main.cpp 调用示例
#include <iostream> #include "SortingFunc1.h" int main() { std::string target_file = "A"; // 可替换为你需要检测的文件路径 file_sort_checker(target_file); return 0; }
内容的提问来源于stack exchange,提问作者Amiu
相关产品推荐
相关产品推荐

