2014-09-03 5 views
-2

Итак, для школьного проекта я пытаюсь составить программу, которая рассчитывает ваш возраст в месяцах в зависимости от вашей даты рождения. Я пишу это на C++. Пожалуйста, не обращайте внимания на использование ненужного/дополнительного кода, поскольку я все еще участвую. Обратите внимание: имена переменных и примечания указаны в Dutch. При использовании, например, 9/6/1996 в качестве даты рождения программа работает нормально, но когда я использую 9/6/1969, она возвращает 30, другими словами, она не работает , и проблема, похоже, связана с годом. Любые идеи о том, как это решить? Заранее спасибо. Мой код:Ваш возраст в месяцах в зависимости от вашей даты рождения

#include <iostream> 
using namespace std; 



int main() { 

    int huidigJaar = 2014; 
    int huidigeMaand = 8; 
    int huidigeDag = 19; 
    int geboorteJaar = 1; 
    int geboorteMaand = 1; 
    int geboorteDag = 1; 
    int totaalMaanden = 1; 

    cout << "Wat is je geboortejaar?"; 
    cin >> geboorteJaar; 
    cout << "Wat is je geboortemaand?"; 
    cin >> geboorteMaand; 
    cout << "Wat is je geboortedag?"; 
    cin >> geboorteDag; 

    int verschilJaar = huidigJaar - geboorteJaar - 1; // niet iedereen is al jarig geweest 

    //kijken of het jaar erbij mag en totaal aantal maanden uitrekenen 
    if (geboorteMaand < huidigeMaand) { //de persoon is dit jaar al jarig geweest 

    verschilJaar = verschilJaar + 1; 

    if (geboorteDag <= huidigeDag) { 

     totaalMaanden = verschilJaar * 12 + (huidigeMaand - geboorteMaand); //de huidige maand komt erbij 

    }else { 

     totaalMaanden = verschilJaar * 12 + (huidigeMaand - geboorteMaand) - 1; //de huidige maand gaat eraf 

    } 

    }else if (geboorteMaand == huidigeMaand) { 

    if (geboorteDag <= huidigeDag) { 

     verschilJaar = verschilJaar + 1; 
     totaalMaanden = verschilJaar * 12; //heel jaar 

    }else { 

     totaalMaanden = verschilJaar * 12 + 11; //er komt niet een heel jaar bij maar wel 11 maanden, omdat de huidige maand niet meetelt 

    } 
    }else { 

    if (geboorteDag <= huidigeDag) { 

     totaalMaanden = verschilJaar * 12 + huidigeMaand + (12 - geboorteMaand); //de persoon moet nog jarig worden, dus geen jaar erbij maar wel de maanden na zijn verjaardag 

    }else { 
     totaalMaanden = verschilJaar * 12 + huidigeMaand + (12 - geboorteMaand) - 1; //zelfde maar dan een maand eraf omdat deze maand niet als een maand gerekend kan worden 

    } 

    } 



return totaalMaanden; 



}//main 
+0

Напишите свой расчет на листе бумаги и воспроизведите его на вашем языке программирования. – specializt

+2

Вы можете использовать 'std :: chrono' для своего школьного проекта? –

+1

Попросите вашего инструктора продемонстрировать использование отладчика. С помощью отладчика вы можете видеть, что переменные изменяются и выполняют оператор программы по инструкции. Очень полезно, особенно в таких случаях. –

ответ

3

Я запустить свой код с моим отладчиком, и я нахожу следующее ПРАВИЛЬНЫХ значения:

  • за 1996 год 6 9 значения 218
  • за 1969 6 9 значения 542

Однако ваш код не отображает их, но возвращает их из основного(). Это плохая практика: main() должен вернуть код ошибки.

Значение возвращается в операционной системе управляется в system dependent образом: под POSIX, Баш, или окна CMD, значения могут быть только от 0 до 255.

Если рассчитать по модулю 542 256 вы» ll find 30.

Если вы сообщаете здесь о проблемах с кодом на C++, убедитесь, что проблема в коде C++, а не в каком-то сценарии оболочки arround.

+0

Спасибо, я смог решить это, используя это! –

1

Я не C++ или говорить нидерландский, но я могу запустить вас через psudo-кода я бы использовать. Из того, что я вижу, что ваш код выглядит намного более сложным, чем это должно быть ... если его из-за нидерландский:

  1. введите DOB в строку, а затем разметить в качестве объекта даты его с помощью некоторые C++ Дата класс,
  2. разобрать месяц и год, как межды,
  3. использовать Date Class, чтобы получить текущую дату, toknize как хорошо, или если опция доступна, получить месяц & одни года
  4. прибудет разница между введенным годом и годом и умножением на 12
  5. Вычтите месяц рождения с 12 лет, чтобы определить возраст в конце года рождения.
  6. получить int месяц "сегодня".
  7. к настоящему времени все ваши значения будут в течение нескольких месяцев. ДОБАВЛЯЙТЕ их все вместе - это должен быть ответ.
+1

Для шага 1 пользователь вводит год, затем месяц, а затем и день месяца, минуя токенизацию. Также «сегодняшняя дата» может быть жестко запрограммирована до 19/9/2014. Кроме того, ваш псевдокод не компенсирует день месяца. –

+1

Спасибо, что нашли время ответить, я решил это решить, но посмотрю, как вы это делаете! –

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