2016-02-18 2 views
-3

Моя логика отключена при вычислении разницы во времени между двумя введенными пользователем.Логика C++ Вычисление разницы во времени

Ответ не приходит к тому, что ему нужно, и я не могу понять, где моя логика неправильная. Я вошел в помощника учителя, и она не помогла мне. Любая помощь будет принята с благодарностью. Если потребуется, я также опубликую мою функцию main(). Поскольку я верю, что что-то с моими логическими значениями становится испорченным.

Я пытаюсь импортировать значения моих переменных из основной функции и вычислять, сколько минут есть в входах пользователей, т.е. 2:10 AM = 130 минут для первого значения, а второе значение равно 2:20 AM ie = 140, разница в 10 минут между слишком входами. Программа печатает 138 минут ... Если кто-то может указать мне в положительном направлении, что было бы весьма полезно.

int computeDifference(int hours, int minutes, int hourFut, int minFut, bool isAM, bool isAMFut){ 
    cout<<isAM<<isAMFut<<endl; 
    int startTime, endTime; 
    startTime = calcHours(isAM, hourFut, minFut, isAMFut); 
    endTime = calcFut(hourFut, minFut, isAMFut, isAM); 
    diff = startTime - endTime; 

    if (diff < 0) 
    diff = abs(diff); 

    return diff; 
} 

int calcHours(int hours, int minutes, bool isAM, bool isAMFut){ 

    if ((hours < 12) && (isAM)) 
    return minutes +(hours * 60); 

    if ((hours == 12 && isAM)) 
    hours = 0; 
if(hours < 12 && !isAM) 
    return minutes + hours * 60; 

} 
int calcFut(int hourFut, int minFut, bool isAMFut, bool isAM){ 
    if ((hourFut == 12) && isAM) 
    hourFut = 0; 

    if ((hourFut) < 12 && !isAM) 
    return minFut + hourFut * 60; 

    if ((hourFut < 12) && isAM) 
    return minFut + hourFut * 60; 

}

** EDIT MAIN FUNCTION

int main(){ 
//Declarations 
    int hours, minutes, hourFut, minFut; 


    bool isAM, isAMFut; 
    string amOrPM, amOrPMFut; 

//Reading in the data from user 
    cout<<"Please enter the time (hours minutes) "; 
    cin>>hours>>minutes; 
    cout<<endl; 
    cout<<"Please enter PM or AM"<<endl; 
    cin>>amOrPM; 
//Converting string to all uppercase so it is easier to check 
    transform(amOrPM.begin(), amOrPM.end(), amOrPM.begin(), ::toupper); 

//Checks if user entered am, or pm if not asks them to re-enter 
    while ((amOrPM != "AM") && (amOrPM != "PM")){ 
    cout<<"Please enter PM or AM: "; 
transform(amOrPM.begin(), amOrPM.end(), amOrPM.begin(), ::toupper); 
    } 

//Turns the boolean to true if it is the morning 
    if (amOrPM == "AM") 
    isAM = true; 

    else 
    isAM = false; 


    cout<<"It is currently "<<hours<<":"<<minutes<<amOrPM<<endl; 
    cout<<endl; 
    cout<<"When would you like to travel too?"<<endl; 
//Reading in future time 

    cout<<"Please enter a time (hours minutes)"<<endl; 
    cout<<"Please enter a time (hours minutes)"<<endl; 
    cin>>hourFut>>minFut; 
    cout<<"Is it AM or PM?"<<endl; 
    cin>>amOrPMFut; 
    transform(amOrPMFut.begin(), amOrPMFut.end(), amOrPMFut.begin(), ::toupper); 
//Checking if user enters am or pm 
    while ((amOrPMFut != "AM") && (amOrPMFut != "PM")){ 
    cout<<"Is it AM or PM?"<<endl; 
    cin>>amOrPMFut; 
    transform(amOrPMFut.begin(), amOrPMFut.end(), amOrPMFut.begin(), ::toupper); 
    } 
    if (amOrPMFut == "AM") 
    isAMFut = true; 

    else 
    isAMFut = false; 

    cout<<isAM<<endl; 
    cout<<isAMFut<<endl; 
+0

Включите вашу основную функцию, стандартный вход и выход, который вы ожидали. Я не видел причины, по которой вам нужны две функции, чтобы конвертировать минуты времени в это. – AchmadJP

+0

@AchmadJP Я добавил функцию main(). – Beez

+0

@AchmadJP Я прошу пользователя ввести два раза, я тогда хочу рассчитать разницу двух раз в минутах. – Beez

ответ

0

Проблема (или, по меньшей мере, один из них) является то, что вы питаетесь в неправильных переменных:

startTime=calcHours(isAM, hourFut, minFut, isAMFut);

не соответствует подписи:

int calcHours(int hours, int minutes, bool isAM, bool isAMFut)

Функция не заботится о имен: переменные должны быть в правильном порядке.

Кроме того, вы действительно должны подумать об очистке своего кода. В частности, функции calcHours и calcFut делают точно то же самое. Вы можете просто избавиться от одного и дважды вызвать оставшуюся функцию с разными параметрами.

+0

Спасибо! Это помогло очистить много вещей. Извините за плохой вопрос, теперь я получаю правильные ответы. У большинства из них все еще есть кое-какие попытки сделать. – Beez

Смежные вопросы