【问题标题】:generate a birthday date randomly in c在c中随机生成生日日期
【发布时间】:2022-01-23 19:17:11
【问题描述】:
int nombreAlea(int min, int max){
    return (rand()%(max-min+1) + min);
}

int main () {
    srand(time(0));
    int annee=nombreAlea(1940,2003),mois=nombreAlea(1,12),jour;
    /// le traitement de la date
    if((mois==1)||(mois==3)||(mois==5)||(mois==7)||(mois==8)||(mois==10)||(mois==12)) jour = nombreAlea(1,31);
    if((mois==4)||(mois==6)||(mois==9)||(mois==11)) jour = nombreAlea(1,30);
    if(mois==2)
    {if (annee % 4 == 0 )
            jour = nombreAlea(1,28);
        else
            jour = nombreAlea(1,29);
    }
    
    /// the format of the date is  jj/mm/aaaa
    signed char Date[20];
    signed char jour_c[3],mois_c[3],annee_c[6];
    itoa(jour,jour_c,10);
    itoa(mois,mois_c,10);
    itoa(annee,annee_c,10);
    Date[0]=jour_c[0];
    Date[1]=jour_c[1];Date[2]='/';
    Date[3]=mois_c[0];Date[4]=mois_c[1];Date[5]='/';
    Date[6]=annee_c[0];Date[7]=annee_c[1];Date[8]=annee_c[2];Date[9]=annee_c[3];Date[10]='\0';
    printf("%s",Date); 
    
    return 0 ;
}

我想随机生成一个生日,但问题是有时我得到一半的日期,有时我只得到2个字符,我不明白问题出在哪里,任何帮助!

【问题讨论】:

  • 如果你想把日期放在一个字符串中,为什么不使用sprintf() 而不是所有那些数组赋值呢?
  • 不要将多条语句合并为一行。不要写复杂的表达式。当问题发生时,这两件事将使您的程序更容易调试。对于测试和调试,请使用固定值而不是随机值。
  • 问题是 jour_c 在 1 到 9 之间的天数中只有一位数字,所以 jour_c[1] 将是空终止符,而不是第二位数字。
  • 顺便说一句:每月二月的日子是错误的。
  • 而且也不处理世纪以来的特殊情况。

标签: c date random


【解决方案1】:

问题在于 jour_c 在 1 到 9 之间的天数中只有一位数字,因此 jour_c[1] 将是空终止符,而不是第二位数字。

– 巴尔马尔

【讨论】:

    【解决方案2】:

    正如 Barmar 的评论,您不能假设 jour_cmois_c 是一个字符的字符串。使用

    Date[0] = '\0';  // or you can initialize it as signed char Date[20] = {0};
    strcat(Date, jour_c);
    strcat(Date, "/");
    strcat(Date, mois_c);
    strcat(Date, "/");
    strcat(Date, annee_c);
    

    而不是

    Date[0]=jour_c[0];
    Date[1]=jour_c[1];Date[2]='/';
    Date[3]=mois_c[0];Date[4]=mois_c[1];Date[5]='/';
    Date[6]=annee_c[0];Date[7]=annee_c[1];Date[8]=annee_c[2];Date[9]=annee_c[3];Date[10]='\0';
    

    【讨论】:

      猜你喜欢
      • 2014-02-25
      • 2013-05-10
      • 2014-09-25
      • 1970-01-01
      • 1970-01-01
      • 2015-06-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多