如何改进此程序使其更易读且错误处理更完善?
时间: 2024-09-24 21:02:00 浏览: 32
为了提高代码的可读性和增加错误处理,你可以考虑以下几个方面进行改进:
1. **注释与文档**:在关键部分添加注释解释每个函数的作用以及参数含义,特别是`getFutureDayOfWeek`函数的内部机制。
2. **类型检查**:对于用户输入进行类型检查,例如检查当前星期数w是否在0到6之间,以及天数n是否为整数。可以使用`std::cin.fail()`判断输入是否有误。
3. **异常处理**:如果用户输入无效,可以抛出异常或者返回友好的错误信息。例如,当输入超出范围时,可以抛出`std::invalid_argument`异常。
4. **函数封装**:将获取用户输入和计算未来星期数的功能封装成独立的函数,比如一个主函数`main`和一个专门处理日期计算的辅助函数。
5. **代码结构**:使用函数式编程的方式可以使代码更清晰,例如将复杂的条件逻辑提取到单独的函数里,如检查闰年的函数。
6. **输出规范化**:确保输出的星期数格式一致,例如始终显示为英文缩写(如Mon、Tue等)。
以下是修改后的简化版代码示例:
```cpp
#include <iostream>
#include <stdexcept>
// 检查输入合法性
bool isValidInput(int week_num, int days) {
if (week_num < 0 || week_num > 6 || !std::cin.fail()) {
throw std::invalid_argument("Invalid input for week number or days passed.");
}
return true;
}
// 计算未来星期数
int calculateFutureDayOfWeek(int week_num, int days) {
return (week_num + days) % 7;
}
int main() {
int current_weekday, days_passed;
try {
std::cout << "请输入今天是星期几(0-6): ";
std::cin >> current_weekday;
std::cout << "请输入已经过去的天数: ";
std::cin >> days_passed;
if (!isValidInput(current_weekday, days_passed)) {
throw std::runtime_error("Invalid data entered.");
}
int future_weekday = calculateFutureDayOfWeek(current_weekday, days_passed);
std::cout << "未来" << days_passed << "天后的那天是星期" << std::map<int, std::string>{{0, "Sun"}, {1, "Mon"}, ...}[future_weekday] << "." << std::endl;
} catch (const std::exception& e) {
std::cerr << "Error: " << e.what() << std::endl;
}
return 0;
}
```
这使得代码更易于理解,并能处理一些常见的输入错误。
阅读全文