以C为单位计算时间差(天、小时、分钟、秒)

以C为单位计算时间差(天、小时、分钟、秒),c,time,date-arithmetic,C,Time,Date Arithmetic,我试图计算天/小时/分/秒之间的时差,但结果不好。 我试着把它们放低,然后在几秒钟内转动它们,然后我把它们恢复到相同的格式(D/H/M/S)。 我的目标是计算花费的时间,在两次之间。比如: 1天2小时3分54秒 3天3小时10分23秒。 以下是我尝试过的: #include <stdio.h> #include <stdlib.h> int main() { int day1, hour1, min1, sec1, day2, hour2, min2, sec

我试图计算天/小时/分/秒之间的时差,但结果不好。 我试着把它们放低,然后在几秒钟内转动它们,然后我把它们恢复到相同的格式(D/H/M/S)。 我的目标是计算花费的时间,在两次之间。比如: 1天2小时3分54秒 3天3小时10分23秒。 以下是我尝试过的:

#include <stdio.h>
#include <stdlib.h>

int main()
{
     int day1, hour1, min1, sec1, day2, hour2, min2, sec2, totalTime;
    printf("Enter input:");
     scanf("%d%d%d%d%d%d%d%d", &day1, &hour1, &min1, &sec1, &day2, &hour2, &min2, &sec2);
     totalTime = (day2-day1)*86400 + (hour2-hour1)*3600 + (min2-min1)*60 + (sec2-sec1);

     printf("D: %d\n", totalTime / 86400);
     totalTime = totalTime % 86400;

     printf("H: %d\n", totalTime / 3600);
     totalTime = totalTime & 3600;

     printf("M: %d\n", totalTime / 60);
     totalTime = totalTime % 60;

     printf("S: %d\n", totalTime);

    return 0;
}
#包括
#包括
int main()
{
int day1,hour1,min1,sec1,day2,hour2,min2,sec2,totalTime;
printf(“输入:”);
scanf(“%d%d%d%d%d%d%d%d%d”、&day1、&hour1、&sec1、&day2、&hour2、&sec2);
总时间=(第2天至第1天)*86400+(第2小时至第1小时)*3600+(第2天至第1天)*60+(第2天至第1天);
printf(“D:%D\n”,总时间/86400);
totalTime=totalTime%86400;
printf(“H:%d\n”,总时间/3600);
totalTime=totalTime&3600;
printf(“M:%d\n”,总时间/60);
totalTime=totalTime%60;
printf(“S:%d\n”,总时间);
返回0;
}

但不要像我预期的那样工作。

鉴于这是一种计算时差的糟糕方法,有两个问题:

  • scanf不能分离整数
  • 时差不对
  • 试试这个:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        int day1, hour1, min1, sec1, day2, hour2, min2, sec2, totalTime;
        printf("Enter input:");
        scanf("%d,%d,%d,%d,%d,%d,%d,%d", &day1, &hour1, &min1, &sec1, &day2, &hour2, &min2, &sec2);
        totalTime = (day2 - day1) * 86400 + (hour2 - hour1) * 3600 + (min2 - min1) * 60 + (sec2 - sec1);
    
        printf("D: %d\n", totalTime / 86400);
        totalTime = totalTime % 86400;
    
        printf("H: %d\n", totalTime / 3600);
        totalTime = totalTime % 3600;
    
        printf("M: %d\n", totalTime / 60);
        totalTime = totalTime % 60;
    
        printf("S: %d\n", totalTime);
    
        return 0;
    }
    
    #包括
    #包括
    int main()
    {
    int day1,hour1,min1,sec1,day2,hour2,min2,sec2,totalTime;
    printf(“输入:”);
    scanf(“%d、%d、%d、%d、%d、%d、%d、%d”、&day1、&hour1、&sec1、&day2、&hour2、&sec2);
    总时间=(第2天-第1天)*86400+(小时2-小时1)*3600+(分钟2-分钟1)*60+(秒2-秒1);
    printf(“D:%D\n”,总时间/86400);
    totalTime=totalTime%86400;
    printf(“H:%d\n”,总时间/3600);
    totalTime=totalTime%3600;
    printf(“M:%d\n”,总时间/60);
    totalTime=totalTime%60;
    printf(“S:%d\n”,总时间);
    返回0;
    }
    

    计算时差的更好方法是使用函数

    aghhh…你如何知道scanf最初是成功的?…如果日期在不同的月份?你说“scanf是成功的”是什么意思?我不想计算超过30天的时差。你的确切输入是什么?他的意思是,如果
    scanf
    成功匹配了所有项目,请参见。始终检查函数的返回值!2月27日到3月4日不到30天。你说的“时差错了”是什么意思?指出拼写错误在代码中的确切位置会很有帮助,但这并不明显。我写了“时差是错误的”,因为在代码的第14行,
    totalTime=totalTime&3600是错误的。它应该是
    totalTime=totalTime%3600