You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++代码合并后无法进入菜单流程问题排查与修复请求

修复后的完整代码
#include <iostream>
#include <limits>
using namespace std;

class Time {
private:
    int hours;
    int minutes;
    int seconds;

    void normalizeTime() {
        // 处理秒进位
        minutes += seconds / 60;
        seconds %= 60;
        if (seconds < 0) { seconds += 60; minutes--; }
        
        // 处理分进位
        hours += minutes / 60;
        minutes %= 60;
        if (minutes < 0) { minutes += 60; hours--; }
        
        // 处理小时的24进制
        hours %= 24;
        if (hours < 0) hours += 24;
    }

public:
    Time(int h = 0, int m = 0, int s = 0) : hours(h), minutes(m), seconds(s) {
        normalizeTime();
    }

    // 重载1:显示当前时间
    void displayTime() {
        printf("%02d:%02d:%02d\n", hours, minutes, seconds);
    }

    // 重载2:显示添加指定时间后的结果
    void displayTime(int addH, int addM, int addS) {
        Time temp(hours + addH, minutes + addM, seconds + addS);
        temp.displayTime();
    }

    void addHours(int h) {
        hours += h;
        normalizeTime();
    }

    void addMinutes(int m) {
        minutes += m;
        normalizeTime();
    }

    void addSeconds(int s) {
        seconds += s;
        normalizeTime();
    }

    void getInitialTime() {
        cout << "请输入初始时间(时 分 秒):";
        while (!(cin >> hours >> minutes >> seconds)) {
            cout << "输入无效,请重新输入整数格式的时 分 秒:";
            cin.clear();
            cin.ignore(numeric_limits<streamsize>::max(), '\n');
        }
        normalizeTime();
        cout << "初始时间设置完成:";
        displayTime();
    }
};

int main() {
    Time t;
    int choice;
    int value;

    t.getInitialTime();

    do {
        // 显示操作菜单
        cout << "\n===== 时间操作菜单 =====" << endl;
        cout << "1. 添加小时" << endl;
        cout << "2. 添加分钟" << endl;
        cout << "3. 添加秒数" << endl;
        cout << "4. 查看当前时间" << endl;
        cout << "5. 退出程序" << endl;
        cout << "请输入选择(1-5):";

        // 处理菜单输入错误
        while (!(cin >> choice) || choice < 1 || choice > 5) {
            cout << "输入无效,请输入1-5之间的整数:";
            cin.clear();
            cin.ignore(numeric_limits<streamsize>::max(), '\n');
        }

        // 执行对应操作
        switch (choice) {
            case 1:
                cout << "输入要添加的小时数:";
                while (!(cin >> value)) {
                    cout << "输入无效,请输入整数:";
                    cin.clear();
                    cin.ignore(numeric_limits<streamsize>::max(), '\n');
                }
                t.addHours(value);
                cout << "更新后时间:";
                t.displayTime();
                break;
            case 2:
                cout << "输入要添加的分钟数:";
                while (!(cin >> value)) {
                    cout << "输入无效,请输入整数:";
                    cin.clear();
                    cin.ignore(numeric_limits<streamsize>::max(), '\n');
                }
                t.addMinutes(value);
                cout << "更新后时间:";
                t.displayTime();
                break;
            case 3:
                cout << "输入要添加的秒数:";
                while (!(cin >> value)) {
                    cout << "输入无效,请输入整数:";
                    cin.clear();
                    cin.ignore(numeric_limits<streamsize>::max(), '\n');
                }
                t.addSeconds(value);
                cout << "更新后时间:";
                t.displayTime();
                break;
            case 4:
                cout << "当前时间:";
                t.displayTime();
                break;
            case 5:
                cout << "程序已退出。" << endl;
                break;
        }
    } while (choice != 5);

    return 0;
}

关键修复点

  • 输入缓冲区清理:每次处理无效输入时,用cin.clear()重置输入状态,cin.ignore()清空缓冲区残留的换行符或无效字符,避免后续输入被直接跳过。
  • 重载函数职责明确:两个displayTime重载分工清晰,无参版本显示当前时间,带参版本计算并显示添加指定时间后的结果,消除调用混淆。
  • 时间自动规范化:新增normalizeTime方法处理时/分/秒的进位和负数情况,确保时间格式始终合法。
  • 菜单循环逻辑修正:用do-while循环保证菜单至少显示一次,直到用户选择退出,完全匹配流程图的循环要求。

内容的提问来源于stack exchange,提问作者jimmyCX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 09:53:18