2017-02-26 63 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