Функция с указателем не работает - C (СИ)
Формулировка задачи:
Всем привет. Вот код.
При выполнении выдает Segmentation Fault. В чем проблема? Хотелось бы, чтобы в month_day последние два аргумента в main обязательно были именно указатели.
#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); }
Решение задачи: «Функция с указателем не работает»
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); }
Объяснение кода листинга программы
- Программа начинается с подключения заголовочного файла stdio.h, который содержит прототипы функций ввода-вывода.
- Определен массив daytab, который содержит количество дней в каждом месяце для не високосного и високосного года.
- В функции month_day передается год, число дней в году и указатели на месяцы и дни.
- Переменная leap вычисляется как 1, если год делится на 4 без остатка и не делится на 100, или год делится на 400 без остатка (это годы, которые кратны 4, за исключением тех, которые кратны 100, но не кратны 400). Это позволяет определить, является ли год високосным.
- В цикле for происходит вычисление месяца путем вычитания дней из переменной yearday до тех пор, пока она не станет меньше или равной нулю.
- Результат цикла for присваивается переменной i, которая затем присваивается указателю pmonth.
- Переменная yearday присваивается указателю pday.
- В функции main создаются переменные a, b, pmonth и pday.
- Значения переменных a и b устанавливаются на 2011 и 61 соответственно.
- Вызывается функция month_day с аргументами a, b, &pmonth и &pday.
- Результат работы функции month_day выводится на экран с помощью функции printf.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д