printf

时间:2017-02-26 09:19:09

标签: c time.h

这是我计算年龄的计划。

#include <stdio.h>
#include <time.h>

int main(void) {

    int d1, d2, m1, m2, y1, y2, d3, m3, y3;

    struct tm *t;
    time_t ts;

    ts = time(NULL);
    t = localtime(&ts);

    printf ("\n Enter date of birth (dd-mm-yyyy) : ");
    scanf ("%2d-%2d-%4d",&d1,&m1,&y1);

    d2 = t->tm_mday;
    m2 = t->tm_mon + 1;
    y2 = t->tm_year + 1900;

    printf ("\n Current Date : %d-%d-%d\n",d2,m2,y2); //Problem on this line

    d3 = d2 - d1;
    m3 = m2 - m1;
    y3 = y2 - y1;

    printf ("%d%d%d",d3,m3,y3);

    if (d3 < 0){
        d3 += 30;
        m3 -= 1;
    }
    if (m3 < 0){
        m3 = 12 + m3;
        y3 = y3 - 1;
    }


    printf ("\n You Are %d Year(s) %d Month(s) %d Day(s) Old",y3,m3,d3);
    return 0;
}

打印当前日期的第14行的问题。我输入16-10-2000作为输入,每次运行程序时,我都会得到这个号码,&#34; 10-817&#34;在第14行换行之后。如果我更改输入,则此数字会更改。为什么在运行程序后会打印这个额外的数字,我该如何解决?

2 个答案:

答案 0 :(得分:3)

printf ("%d%d%d",d3,m3,y3);这是你的额外行。删除它

如果您想知道值来自何处:

d3 = d2 - d1;// 26 - 16 = 10 
m3 = m2 - m1;// 2 - 10 = -8
y3 = y2 - y1;// 2017 - 2000 = 17

因此10-817

答案 1 :(得分:3)

执行程序后没有打印多余的数字。在你的程序中你有3个printf()

  1. 提示出生日期
  2. 打印当前日期
  3. 出生日期与当前日期之间的差异
  4. 最终结果
  5. 您认为由于3rd printf()而打印的额外数字。所以请注释或删除第27行的