scanf и getchar вместе, чтобы прочитать строку - PullRequest
0 голосов
/ 29 мая 2019

У меня есть этот код:

Hotel new_h = (Hotel*)malloc(sizeof(Hotel));
printf("\nInsert name -> ");
scanf("%[^\n]s", new_h->name);
getchar();

Прежде всего, как это работает% [^ \ n] s

Почему внутри scanf нет только% s?

А почему тоже есть getchar?

1 Ответ

0 голосов
/ 29 мая 2019

Функция getchar() в этом случае будет необходима, только если вы сделаете следующий ввод после названия отеля, в этом случае я бы порекомендовал вам просто добавить пробел перед% s, что-то вроде этого scanf(" %[^\n]s", new_h->name);.

Что касается malloc() как ваше определение отеля, потому что оно должно быть объявлено как указатель, так что вы можете выделить ему память, приведение его к типу указатель недостаточно, и это приведет кдля segfault вы должны объявить его как

Hotel *new_h = malloc(sizeof(Hotel));

Это означает, что вы определяете отель как нечто подобное

typedef struct{
    //Some vars
}Hotel;
...