Как мне заставить sscanf работать в unix со структурой? - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь сделать как состояние комментариев, однако мое утверждение sscanf не работает. Я должен инициализировать переменные для dob до использования sscanf? Моя программа продолжает предупреждать меня, что они не инициализированы, но после запуска она пропускает мой sscanf.

#include <stdio.h>

// define a structure called  dob  that contains an array for month,
//    an integer for day, and an integer for year

typedef struct{
  char month[3];
  int day;
  int year;
}dob;


int main(int argc, char *argv[]) {
   // declare a variable  bday  whose type is the structure  dob
   dob bday;

   // show  sscanf() statements to get the values entered at the
   // command line into the variable  bday if user enters the following:
   // Jan 31 1967 = input   
   // ./a.out Jan 31 1967

   sscanf("%s %i %i", bday.month, bday.day, bday.year);


   // finish the printf statement below
   printf("Your birthday is: %s %d, %d\n",  bday.month, bday.day, bday.year);

    return 0;

}

1 Ответ

2 голосов
/ 30 октября 2019

Убедитесь, что месяц может содержать 3 символа и нулевой терминатор: char month[4];

Инициализировать dob и буфер для ввода:

  char inbuf[80] = {0};
  dob bday = {0};

Не забудьте разрешить пользователювведите некоторые данные:

  fgets(inbuf, sizeof(inbuf), stdin);

Правильно вызовите sscanf, введя строку для сканирования перед строкой форматирования (обратите внимание, что сканирование строки ограничено 3 символами для безопасности памяти), затем адреса членов, которые выхочу изменить:

  sscanf(inbuf, "%3s %i %i", bday.month, &bday.day, &bday.year);
...