2014-10-01 32 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