Возврат дня из функции - 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[] и вывода его на экран.
- Если считанная строка не является действительной датой, то цикл продолжает считывать строки до тех пор, пока не будет введен корректный ввод.
- Программа завершается, когда достигается конец файла или когда пользователь вводит пустой ввод.