Возврат дня из функции - C (СИ)
Формулировка задачи:
Как правильно воспользоваться возвратом функции? Если строка соответствует DDDD-DD-DD, то нужно вернуть день этой даты и выписать этот день в main функции. Спасибо.
Ошибка при компиляции.
#include <stdio.h> #include <stdlib.h> #include <time.h> unsigned char buf[101]; int isDate(char *buf) { if (buf[10] == '\0' && buf[4] == '-' && buf[7] == '-') { time_t rawtime; struct tm * timeinfo; int year, month ,day; const char * weekday[] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; scanf ("%d-%d-%d",&year, &month, &day); time ( &rawtime ); timeinfo = localtime ( &rawtime ); timeinfo->tm_year = year - 1900; timeinfo->tm_mon = month - 1; timeinfo->tm_mday = day; mktime ( timeinfo ); return weekday[timeinfo->tm_wday]; } return 0; } int main (unsigned char argc, unsigned char *argv[]) { while(scanf("%s",&buf) != EOF)) { if (isDate(buf)) { printf ("\ndate: %s", weekday[timeinfo->tm_wday] , buf); } } return 1; }
Решение задачи: «Возврат дня из функции»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <time.h> int isDate(const char* buff) { int year, month , day; time_t rawtime; struct tm* timeinfo; if (sscanf(buff, "%u-%u-%u", &year, &month, &day) != 3) { return -1; } time(&rawtime); timeinfo = localtime(&rawtime); timeinfo->tm_year = year - 1900; timeinfo->tm_mon = month - 1; timeinfo->tm_mday = day; mktime(timeinfo); return timeinfo->tm_wday; } int main(int argc, char* argv[]) { char buff[11]; const char* weekday[] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; int i; while (fgets(buff, sizeof(buff), stdin) != NULL) { if ((i = isDate(buff)) != -1) { printf("date: %s\n", weekday[i]); } } return 0; }
Объяснение кода листинга программы
- Программа на языке C скомпилирована с библиотеками stdio.h, stdlib.h и time.h
- Функция isDate() принимает на вход строку, парсит ее на год, месяц и день, используя функцию sscanf(). Если парсинг не удался, функция возвращает -1.
- В функции main() создается массив строк weekday[] с названиями дней недели.
- В функции main() создается буфер buff[] для чтения даты из стандартного ввода.
- В функции main() выполняется цикл while, который считывает строку из стандартного ввода, пока не будет введен пустой ввод или сигнал конца файла.
- Если считанная строка является действительной датой, то функция isDate() возвращает номер дня недели, который затем используется для поиска соответствующего названия дня в массиве weekday[] и вывода его на экран.
- Если считанная строка не является действительной датой, то цикл продолжает считывать строки до тех пор, пока не будет введен корректный ввод.
- Программа завершается, когда достигается конец файла или когда пользователь вводит пустой ввод.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д