2013-12-19 46 views
1

我正在嘗試查找兩個日期之間經過的天數。但是,有些日期的程序會在兩個日期之間打印錯誤的天數。爲什麼在返回結構函數時出現計算錯誤

爲經過的天數的公式爲:N = 1461 XF(年,月)/ 4+ 153×g下(月)/ 5 +天

在我的程序,我有f和g定義爲函數根據用戶輸入的內容返回不同的年份和月份值。

主要問題可能在於我如何使用日期結構中的局部變量掃描用戶輸入。

N1是第一天的經過天數。 N2是第二次約會。

下面是我寫的代碼:

#include <stdio.h> 
#include <stdbool.h> 
#include <stdlib.h> 
struct date { 
     int month; 
     int day; 
     int year; 
    }; 

int f(int theyear, int themonth){ 
    if (themonth <=2) 
     theyear = theyear-1; 
    else 
     theyear =theyear; 
    return theyear; 
} 

int g(int Month){ 
    if (Month<=2) 
     Month=Month+13; 
    else 
     Month = Month+1; 

    return Month; 
} 

int main() 

{ 

    struct date time1, time2; 
    int N1; int N2; 



    printf("Enter time1 (mm,dd,yyyy): "); 
    scanf("%i%i%i", &time1.month, &time1.day, &time1.year); 

    printf("Enter time2 (mm,dd,yyyy): "); 
    scanf("%i%i%i", &time2.month, &time2.day, &time2.year); 
    N1=1461 * f(time1.year,time1.month)/4 + 153 * g(time2.month)/5 +3; 
    N2 = 1461 * f(time2.year,time2.month)/4 +153 * g(time2.month)/5 +21; 



    printf("%d \n",abs(N1 -N2)); 

    return 0; 

} 

非常感謝你。 :)

樣品輸入/輸出:

輸入TIME1(毫米,DD,YYYY):04 10 1994 輸入時間2(毫米,DD,YYYY):03 10 1994 18

正如你可以看到,它打印出18個。但是,它應該是一個月中的天數。

+2

請輸入和輸出樣品。 –

+0

告訴您的用戶避免某些日期組合,並將其稱爲「功能」。然後,修復後,你可以宣傳它有「新功能!!」或者..舉一些例子。 – usr2564301

+0

您是否嘗試*調試*您的問題? –

回答

3

變化

N1=1461 * f(time1.year,time1.month)/4 + 153 * g(time2.month)/5 +3; 
N2 =1461 * f(time2.year,time2.month)/4 +153 * g(time2.month)/5 +21; 

N1=1461 * f(time1.year,time1.month)/4 + 153 * g(time1.month)/5 + time1.day; 
N2 =1461 * f(time2.year,time2.month)/4 +153 * g(time2.month)/5 + time2.day; 

+1

你是如何解釋這一點的?做得好! –

+1

哈哈,很想知道爲什麼他有N1的+3和N2的+21,然後回頭看公式,應該是日子而不是固定的數字 – JoeC

相關問題