Функция с указателем не работает - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Всем привет. Вот код.
#include <stdio.h>
 
char daytab[2][13] =   
  {
    {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
    {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
  };
 
void month_day(int year, int yearday, int *pmonth, int *pday)
{
  int i, leap;
  
  leap = year%4 == 0 && year%100 != 0 || year%400 == 0;
  for (i = 1; yearday > daytab[leap][i]; i++)
    yearday -= daytab[leap][i];
  *pmonth = i;
  *pday = yearday;
}
 
void main(void)
{
  int a, b, *pmonth, *pday;
  a = 2011;
  b = 61;
 
  month_day(a, b, pmonth, pday);
  printf("%d\n%d\n", *pmonth, *pday);
}
При выполнении выдает Segmentation Fault. В чем проблема? Хотелось бы, чтобы в month_day последние два аргумента в main обязательно были именно указатели.

Решение задачи: «Функция с указателем не работает»

textual
Листинг программы
#include <stdio.h>
 
char daytab[2][13] =
{
{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};
 
void month_day(int year, int yearday, int *pmonth, int *pday)
{
int i, leap;
 
leap = year%4 == 0 && year%100 != 0 || year%400 == 0;
for (i = 1; yearday > daytab[leap][i]; i++)
yearday -= daytab[leap][i];
*pmonth = i;
*pday = yearday;
}
 
void main(void)
{
int a, b, pmonth, pday;
a = 2011;
b = 61;
 
month_day(a, b, &pmonth, &pday);
printf("%d\n%d\n", pmonth, pday);
}

Объяснение кода листинга программы

  1. Программа начинается с подключения заголовочного файла stdio.h, который содержит прототипы функций ввода-вывода.
  2. Определен массив daytab, который содержит количество дней в каждом месяце для не високосного и високосного года.
  3. В функции month_day передается год, число дней в году и указатели на месяцы и дни.
  4. Переменная leap вычисляется как 1, если год делится на 4 без остатка и не делится на 100, или год делится на 400 без остатка (это годы, которые кратны 4, за исключением тех, которые кратны 100, но не кратны 400). Это позволяет определить, является ли год високосным.
  5. В цикле for происходит вычисление месяца путем вычитания дней из переменной yearday до тех пор, пока она не станет меньше или равной нулю.
  6. Результат цикла for присваивается переменной i, которая затем присваивается указателю pmonth.
  7. Переменная yearday присваивается указателю pday.
  8. В функции main создаются переменные a, b, pmonth и pday.
  9. Значения переменных a и b устанавливаются на 2011 и 61 соответственно.
  10. Вызывается функция month_day с аргументами a, b, &pmonth и &pday.
  11. Результат работы функции month_day выводится на экран с помощью функции printf.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.545 из 5
Похожие ответы