2014-10-01 33 views
-2

我需要減去2個角度有度,分,秒由操作員鍵入。例如:30度50分45秒-10度20分53秒= 20度29分52秒。但是我的代碼返回32767分鐘。減去2度角度,分,秒

這是我的代碼:

#include <stdio.h> 

int main(int argc, char **argv) 
{ 
    int g1,m1,s1; //timp 1 
    int g2,m2,s2; //timp 2 
    int g,m,s; //calcule 
    printf("Interval1:"); scanf("%d%d%d",&g1,&m1,&s1); 
    printf("Interval2:"); scanf("%d%d%d",&g2,&m2,&s2); 
    if(s1<s2) { 
     s=(s1+60)-s2; 
     m1=m1-1; 
    } else if(m1<m2) { 
     m=(m1-60)-m2; 
     g1=g1-1; 
    } else { 
     s=s1-s2; 
     m=m1-m2; 
    } 

    g=g1-g2; 

    printf("%d %d %d",g,m,s); 
    return 0; 
} 

的回報是:

Interval1:30 50 45 
Interval2:10 20 53 
20 32767 52 

------------------ 
(program exited with code: 0) 
Press return to continue 
+4

通過單步執行程序和檢查變量的值......需要你幾分鐘的時間來找到這樣的錯誤。 – Lundin 2014-10-01 13:33:03

+0

你有'm'的問題。也許你應該瀏覽所有的代碼路徑,看看它是如何具有超出聲明時未初始化的數字的值(如果它被賦值......) – HostileFork 2014-10-01 13:34:00

回答

0

那麼複雜:

secs2gms(gms2secs(g1, m1, s1) - gms2secs(g2, m2, s2), &g, &m, &s); 

... 

long gms2secs(int g, int m, int s) { 
    return g * 3600L + m * 60 + s; 
} 

void secs2gms(long secs, int *g, int *m, int *s) { 
    *s = secs % 60; 
    secs /= 60; 
    *m = secs % 60; 
    *g = secs/60; 
} 
+1

只要secs = 0,'secs2gms()'看起來不錯。如果差異打印出「-123 -1 -2」或「-123 1 2」?順便說一句:在這裏很好地使用'長'。注意,如果'g <0','gms2secs()'類似的問題。 – chux 2014-10-01 15:26:24

0

這是好嗎?

#include <stdio.h> 

int main(int argc, char **argv) 
{ 
    int g1,m1,s1; //timp 1 
    int g2,m2,s2; //timp 2 
    int g,m,s,mt,gt; //calcule 
    printf("Interval1:"); scanf("%d%d%d",&g1,&m1,&s1); 
    printf("Interval2:"); scanf("%d%d%d",&g2,&m2,&s2); 
    if(s1<s2 && m1<m2) { 
     s=(s1+60)-s2; 
     mt=m1-1; 
     m=mt-m2; 
     g=g1-g2; 
     m=(m1+60)-m2; 
     gt=g1-1; 
     g=gt-g2; 
    } else if(s1<s2) { 
     s=(s1+60)-s2; 
     mt=m1-1; 
     m=mt-m2; 
     g=g1-g2; 
    } else if(m1<m2) { 
     m=(m1+60)-m2; 
     gt=g1-1; 
     g=gt-g2; 
     s=s1-s2; 
    } else { 
     m=m1-m2; 
     s=s1-s2; 
     g=g1-g2; 
    } 

    printf("%d %d %d",g,m,s); 
    return 0; 
} 
+1

「這是好?」是一個問題。如果需要,請附加到您的信息附加信息,代碼或問題。這個區域是爲了解答。 – chux 2014-10-01 14:59:33