Я новичок в мире C, и у меня проблема с функцией fgets()
. Я искал почти 2 часа своей ошибки и нашел разные решения, но никто не работал.C fgets семантическая ошибка
Мой класс слишком велик для просто показать каждую ее части, но позвольте мне показать вам проблемную часть:
//... kivansag is a struct(!)
if(check == 1){
char name;
printf("Please give me your nickname!\n");
scanf("%s", &name);
strcpy(kivansag.name,&name);
char city;
printf("Please give me your city!\n");
scanf("%s", &city);
strcpy(kivansag.city,&city);
char *address = malloc(100);
printf("Please give me your address!\n");
fgets(address,100,stdin);
if((strlen(address)>0) && address[strlen(address)-1] == '\n'){
address[strlen(address)-1] = '\0';
}
strcpy(kivansag.address,address);
free(address);
}//...
Проблема заключается в том: Каждый раз, когда я запускаю этот код, бегущая сервер пропуск fgets()
после того, как он написал «Дайте мне свой адрес» и выполните следующую функцию.
Могу ли я получить предложения?
ОБНОВЛЕНО:
Теперь у меня есть только это:
printf("Please give me your address!\n");
fgets(kivansag.address,sizeof(kivansag.address),stdin);
if((strlen(kivansag.address)>0) && kivansag.address[strlen(kivansag.address)-1] == '\n'){
kivansag.address[strlen(kivansag.address)-1] = '\0';
}
структура кажется, что это:
struct Kivansag{
//...
char address[100];
};
И да, еще пропуская мою часть ... Я пытался использовать fflush(stdin)
тоже, чтобы все было ясно, но не сработало.
'char name;' - переменная с достаточным пространством для ** одного символа **. – wildplasser
Подсказка: какой символ не соответствует 'scanf ("% s ")' (остающийся во входном потоке), но приводит к немедленному возврату 'fgets()'? – EOF
всегда проверяют (! = NULL) возвращаемое значение из malloc(), чтобы гарантировать успешную работу. – user3629249