只能在第一次提示后输入输入,然后程序完成c ++

时间:2015-07-13 19:25:20

标签: c++

所以我正在尝试将这个程序整合到一个项目中,这对我来说很奇怪。以下是控制台中发生的事情的示例:

从当前时间和等待期计算完成时间

当前时间:

以HH:MM 12:50 的格式输入24小时时间 等待时间:
以24小时格式输入格式为HH:MM完成时间的24小时时间:
4644952:4198980个
输入Y或y继续,任何其他停止
进程返回0(0x0)执行时间:3.927 s
按任意键继续。

粗体部分是我可以输入的唯一部分,然后它只是运行cout语句而不让我输入第二部分数据。然后从计算函数输出一些垃圾数。这是我的代码:

#include <iostream>
using namespace std;
void getEndTime(int c_hours, int c_minutes, int w_hours, int w_minutes, int& e_hours, int& e_minutes);
void getCurrentTime(int& c_hours, int& c_minutes);
void getWaitingTime(int& w_hours, int& w_minutes);
void runLoop();
int main()
{
    char select;
    cout << "Compute completion time from current time and waiting period \n";
    do {
        runLoop();
        cout << "Enter Y or y to continue, any other halts";
        cin >> select;
    } while (select == 'y' || select == 'Y');
    return 0;
}
void runLoop()
{
    int current_hours, current_minutes, waiting_hours, waiting_minutes;
    int end_hours, end_minutes;
    getCurrentTime(current_hours, current_minutes);
    getWaitingTime(waiting_hours, waiting_minutes);
    getEndTime(current_hours, current_minutes, waiting_hours, waiting_minutes, end_hours, end_minutes);
    cout << "Completion time in 24 hour format:\n" << end_hours << ":" << end_minutes << endl;
    }
void getCurrentTime(int& c_hours, int& c_minutes)
{
    cout << "Current time:\n"
    << "Enter 24 hour time in the format HH:MM ";
    cin >> c_hours >> c_minutes;
 }
void getWaitingTime(int& w_hours, int& w_minutes)
{
    cout << "Waiting time:\n"
    << "Enter 24 hour time in the format HH:MM ";
    cin >> w_hours >> w_minutes;
}
void getEndTime(int c_hours, int c_minutes, int w_hours, int w_minutes, int& e_hours, int& e_minutes)
{
    if ((c_hours + w_hours) >= 24) {
        e_hours = (c_hours + w_hours - 24);
    }
    else {
        e_hours = (c_hours + w_hours);
    }
    if ((c_minutes + w_minutes) >= 60) {
        e_hours += 1;
        e_minutes = (c_minutes + w_minutes) - 60;
    }
    else {
        e_minutes = c_minutes + w_minutes;
    }
    return;
}

我对此很陌生,所以如果有一些明显的我遗失,我会道歉。但是我希望你们中的一个可以帮助我,我完全不知道为什么这不起作用!谢谢!

1 个答案:

答案 0 :(得分:2)

您遇到的问题是cin正在进入错误状态,并且对cin的所有后续调用都将自动失败,程序将继续运行。当你有时间时:

void getCurrentTime(int& c_hours, int& c_minutes)
{
    cout << "Current time:\n"
    << "Enter 24 hour time in the format HH:MM ";
    cin >> c_hours >> c_minutes;
 }

您没有吃:中存在的12:50。因此,它会尝试将:插入分钟并失败。

您需要做的是致电cin.get():然后获取会议记录。

void getCurrentTime(int& c_hours, int& c_minutes)
{
    cout << "Current time:\n"
    << "Enter 24 hour time in the format HH:MM ";
    cin >> c_hours;
    cin.get(); // eats :
    cin >> c_minutes;
 }