Гость Опубликовано 9 сентября, 2004 Жалоба Поделиться Опубликовано 9 сентября, 2004 Здравствуйте я только начал изучать С и вот грабли (но кто на них не наступал вот мой код: #include #include #define MAX 5 struct INFpilot { unsigned int nb; char name[20]; } infpilot[MAX]; void init_struct(void); void init_struct(void) { register int t; for (t=0; t } int main(void) { int i, j; // init_struct(); printf("Enter number of pilots: "); scanf("%d", &i); for(j=0; j { printf("Enter pilot's number: "); scanf("%d", &(infpilot[j].nb)); printf("Enter pilot name: "); gets(infpilot[j].name); //<--------(!) } return 0; } gets() упорно не хочет принять строку, подсмотрел в ddd, что после printf() выполняется инструкция for, игнорируя gets(). Конечно можно scanf("%s", xxxx), тогда все нормально, но все же хотелось бы ориентироваться по книге Кто растолкует ? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 16 сентября, 2004 Жалоба Поделиться Опубликовано 16 сентября, 2004 Вот как точно будет работать: #include <stdio.h> #include <stdlib.h> #define MAX 5 struct INFpilot { unsigned int nb; char name[20]; } infpilot[MAX]; int main(void) { int i, j, answered = 0; printf("Enter number of pilots: "); scanf("%d", &i); for(j=0; j < i; j++) { printf("Enter pilot's number: "); scanf("%d", &(infpilot[j].nb)); answered = 0; printf("Enter pilot name: "); while(!answered) { fgets(infpilot[j].name, 20, stdin); if(infpilot[j].name[0] != '\n') { infpilot[j].name[strlen(infpilot[j].name) - 1] = '\0'; answered = 1; } } } return 0; } Не пользуйтесь функцией gets (причины очевидны). Даже компилятор об этом пишет. Вполне вероятно, что в libc в теле gets() просто стоит return(0). [alex@barracuda ~/projects/tests]gcc gets.c /tmp/cc4Yzj4b.o(.text+0xb6): In function `main': : the `gets' function is dangerous and should not be used. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.