преобразование дней в годы, месяцы, дни не показывает правильный результат в c

#c #days

#c #дни

Вопрос:

 #include<stdio.h>//Its not showing the correct result//

int main()
{
    int y,m,d;
    scanf("%d",amp;d);
    y=0;
    m=0;
    y=d/365;
    d=d%365;
    m=d/30;
    d=d%30;
    printf("%d ano(s)n",amp;y);
    printf("%d mes(es)n",amp;m);
    printf("%d dia(s)n",amp;d);

    return 0;
}
  

Комментарии:

1. Не могли бы вы, пожалуйста, привести пример ввода, что вы ожидаете, что программа будет выводить, и что она на самом деле выводит вместо этого?

2. Когда я пытаюсь скомпилировать и запустить этот код самостоятельно, он указывает, что printf takes со строкой "%d" формата принимает int s в качестве аргументов, а не int* указателей. Удаление amp; printf инструкций from должно помочь. (Хотя, если ваша проблема заключается, например, в неправильной обработке високосных лет или месяцев длиной 28 или 31 день, это, очевидно, не решит ее.)

3. Из любопытства, поскольку я постоянно сталкиваюсь со своими кварцевыми наручными часами с датами, можно ли учесть разницу в 30-31 день, не зная, какой это месяц?

4. @APJo Время для часов, синхронизированных с источником времени, возможно, с WWV ? или GPS? 🙂

5. @chux-RestorateMonica мой — хороший старый анализ, никаких сложных вычислений вообще, просто механическая точность — нуждается в повторной настройке в конце каждого месяца, у которого меньше 31 дня XD … это «прекрасные часы», поэтому я ухмыляюсь и терплю. Другой мой анализ фактически также отслеживает месяц и луну механически, поэтому он настраивается сам 🙂

Ответ №1:

преобразование не показывает правильный результат

m=d/30; имеет смысл, если во всех месяцах было 30 дней.
Они этого не делают, если не используют другой подобный календарь.

Код должен учитывать различное количество дней в месяц и високосные годы.


Экономьте время. Включите все предупреждения компилятора. Выведите значение, а не адрес.

 // printf("%d ano(s)n",amp;y);
// printf("%d mes(es)n",amp;m);
// printf("%d dia(s)n",amp;d);
printf("%d ano(s)n", y);
printf("%d mes(es)n", m);
printf("%d dia(s)n", d);
  

Комментарии:

1. возможно, Op перепутал способ scanf() приема аргументов с printf() … со мной тоже однажды случилось 🙂

2. @APJo Я тоже так подозреваю, но хорошо работающий компилятор дает более быструю обратную связь, чем SO, и, надеюсь, OP попытается повысить производительность.

3. Проблема решена. Я новичок в программировании. предложите мне лучший компилятор. Я использую codeblocks. Но это не дало отзывов об этой проблеме.

4. @MdMehediHasan поскольку Code::Blocks использует MinGW, вы можете просто добавить -Wall -Wextra -pedantic -Wshadow в качестве опций, и это будет охватывать практически все предупреждения. Прочитайте и поймите каждое предупреждение и исправьте его. Не принимайте код, пока он не будет скомпилирован без предупреждения. Вы можете узнать из своего компилятора столько же, сколько и из любой хорошей книги.