[英]Why is there a computation error when returning function with structure
我想找到兩個日期之間經過的天數。 但是,對於某些日期,程序會在兩個日期之間打印錯誤的天數。
經過天數的公式為:N = 1461 xf(年,月)/ 4 + 153 xg(月)/ 5 +天
在我的程序中,我將f和g定義為函數,根據用戶輸入的內容返回不同的年和月值。
主要問題可能在於我如何使用日期結構中的局部變量掃描用戶輸入。
N1是第1個日期的經過天數。 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(mm,dd,yyyy):04 10 1994輸入time2(mm,dd,yyyy):03 10 1994 18
正如您所看到的,它打印出18個。但是,它應該是一個月內的天數。
更改
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;
?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.