2017-02-26 98 views
-4

这是我计算年龄的程序。printf后打印的额外数字

#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作为输入,每次运行程序时,我都会在第14行的换行符后面得到这个数字“10-817”。如果我改变了输入,这个数字就会改变。为什么在运行我的程序后打印此额外数字,我该如何解决?

+0

SO不是一个调试服务。编译符号,在调试器中运行代码,逐行跟踪程序,检查相关变量的值,以了解真正发生的事情。如果出现*特定*问题,请随时返回此处。 – alk

回答

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

+0

我想通了。但我没有注意到额外的printf。 –

3

有你执行程序后,打印没有额外号码。在你的程序中,有3个printf()的

  1. 及时得到分娩
  2. 的日期打印当前日期的出生日期和当前日期
  3. 最终结果之间
  4. 差异

您认为由于第三次printf(),您正在获取额外的数字。所以注释或删除它是行号27

+0

也注意到,日期差异的计算可以/将具有负数。建议在它们之间用空格显示这些值。 – user3629249