根据您的出生日期,您的年龄为几个月

时间:2014-09-03 18:55:33

标签: c++

因此,对于一个学校项目,我正在尝试制作一个程序,根据您的出生日期计算您的年龄。我是用C ++编写的。因为我还在学习,请不要介意使用不必要/额外的代码。请注意:变量名称和注释位于荷兰语中。当使用例如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

2 个答案:

答案 0 :(得分:3)

我用调试器运行你的代码,我发现以下 CORRECT 值:

  • for 1996 6 9 a值218
  • for 1969 6 9 a value of 542

但是,您的代码不会显示它们,但会从main()返回它们。这是一种不好的做法:main()将返回错误代码。

返回给操作系统的值以 system dependent 方式管理:在POSIX,bash或windows cmd下,值只能在0到255之间。

如果你计算542模256,你会发现30。

如果你在这里报告C ++代码的问题,请确保问题出在C ++代码中,而不是在一些shell脚本中。

答案 1 :(得分:1)

我不是C ++或说荷兰语,但我可以帮助你完成我使用的psudo代码。从我所看到的,你的代码看起来要比它应该复杂得多......除非是因为荷兰语:

  1. 以字符串形式输入DOB,然后将其标记为它使用的日期对象 一些C ++ Date类,
  2. 将月份和年份解析为int,
  3. 使用日期类来获取今天的日期,也可以使用日期,或者如果选项是 可用,得到月和&amp;一年一次
  4. 获取输入年份与提供年份之间的差异,然后乘以12
  5. 从12岁中减去出生月份,以确定出生年末的年龄。
  6. 获取&#34;今天&#34;。
  7. 的月份
  8. 到现在为止,你所有的价值都是几个月。将它们加在一起 ​​- 这应该是一个答案。