2015-09-14 4 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

'(а/DAYS_PER_YEAR) - y' где' 'y' является (а/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; 
} 
Смежные вопросы