2015-07-13 1 views
0

Итак, я пытаюсь собрать эту программу для проекта, и это ведет себя странно для меня. Вот пример того, что происходит в консоли:только может вводить ввод после первого запроса, затем заканчивается программа C++

Compute Время окончания от текущего времени и периода ожидания

Текущее время:

Введите 24-часовой время в формате HH: MM 12:50
время ожидания:
Введите 24-часовой время в формате HH: MM время сдачи в 24-часовом формате:
4644952: 4198980
Введите Y или 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

Я настоятельно рекомендую вам (а) научиться использовать отладчик вашей платформы, и (б) при отсутствии (или даже в дополнение к) отладчик * * Обильно посыпать 'сегг << ваш-варьировали здесь << std :: endl; 'по всему вашему коду, чтобы убедиться, что вы * думаете * читаете, на самом деле. – WhozCraig

+1

Разумная тестовая версия, но эта тема была рассмотрена на Bazillion раз на SO. Перед тем, как спросить, выполните _research_. –

+0

@WhozCraig Может быть, я что-то упустил, мой компилятор не дал ошибок сборки. Является ли отладчик чем-то другим? Можете ли вы указать мне некоторую информацию по этому вопросу, пожалуйста? – madEngineer

ответ

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; 
} 
+0

Спасибо! По какой-то причине я думал, что он согласится: так же, как и пространство.Это очень полезно, спасибо вам снова! – madEngineer