2015-09-14 83 views
-2

我想用C語言查找年數,週數&天。我不知道我的代碼有什麼問題。請幫忙:計算C中的時間

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h> 

#define DAYS_PER_WEEK 7 
#define WEEKS_PER_YEAR 52 
#define DAYS_PER_YEAR 364 

int main(void) 
{ 

    int a; int y; double w; double days; int weeks; 

    printf("Enter the time in days: "); 
    scanf("%d", &a); 


    y = a/DAYS_PER_YEAR; 
    w = ((a/ DAYS_PER_YEAR) - y)* WEEKS_PER_YEAR; 
    weeks = ((a/DAYS_PER_YEAR) - y)* WEEKS_PER_YEAR; 
    days = (w - weeks)* DAYS_PER_WEEK; 

    printf(" %d days is %d years, %d weeks and %d days", a, y, weeks, days); 


    return 0; 
} 

有人能告訴我我哪裏出了問題嗎?我懷疑問題在於printf函數。

+1

'(A/DAYS_PER_YEAR) - y'其中'y'是'(A/DAYS_PER_YEAR)'。你認爲可以評估除0之外的任何內容嗎?另外,編譯器肯定會給你一個警告,你不應該忽略:'warning:format'%d'需要類型'int'的參數,但是參數5的類型是'double'[-Wformat =] printf(「%d天是%d年,%d周和%d天「,a,y,周,天);' – kaylum

回答

0

我認爲你錯過了你的邏輯清晰度。

我猜測,鑑於總天數,你正在努力尋找天的年數,週數和數量,使得:

total_days = 365*years + 7*weeks + days 

有了這個假設,您可以使用:

#include <stdio.h> 

#define DAYS_PER_WEEK 7 
#define WEEKS_PER_YEAR 52 
#define DAYS_PER_YEAR 364 

int main(void) 
{ 
    int a; 
    int years; 
    int days; 
    int weeks; 
    int rest; 

    printf("Enter the time in days: "); 
    scanf("%d", &a); 

    years = a/DAYS_PER_YEAR; 
    rest = (a - years*DAYS_PER_YEAR); 

    weeks = rest/DAYS_PER_WEEK; 
    rest = (rest - weeks*DAYS_PER_WEEK); 

    days = rest; 

    printf("%d days is %d years, %d weeks and %d days.\n", 
      a, years, weeks, days); 


    return 0; 
} 
2

首先,DAYS_PER_YEAR應該是365(不含餐飲閏年)。

其次,使用操作者'%'簡化計算:

#include <stdio.h> 

#define DAYS_PER_WEEK 7 
#define WEEKS_PER_YEAR 52 
#define DAYS_PER_YEAR 365 

int main(void) 
{ 
    int a, years, weeks, days, remains; 

    printf("Enter the time in days: "); 
    scanf("%d", &a); 

    years = a/DAYS_PER_YEAR; 
    remains = a % DAYS_PER_YEAR; 
    weeks = remains/DAYS_PER_WEEK; 
    days = remains % DAYS_PER_WEEK; 

    printf("%d days is %d years, %d weeks and %d days\n", a, years, weeks, days); 

    return 0; 
}