Возврат дня из функции - 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;
}

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

  1. Программа на языке C скомпилирована с библиотеками stdio.h, stdlib.h и time.h
  2. Функция isDate() принимает на вход строку, парсит ее на год, месяц и день, используя функцию sscanf(). Если парсинг не удался, функция возвращает -1.
  3. В функции main() создается массив строк weekday[] с названиями дней недели.
  4. В функции main() создается буфер buff[] для чтения даты из стандартного ввода.
  5. В функции main() выполняется цикл while, который считывает строку из стандартного ввода, пока не будет введен пустой ввод или сигнал конца файла.
  6. Если считанная строка является действительной датой, то функция isDate() возвращает номер дня недели, который затем используется для поиска соответствующего названия дня в массиве weekday[] и вывода его на экран.
  7. Если считанная строка не является действительной датой, то цикл продолжает считывать строки до тех пор, пока не будет введен корректный ввод.
  8. Программа завершается, когда достигается конец файла или когда пользователь вводит пустой ввод.

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


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

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

13   голосов , оценка 3.769 из 5