nkorobkov
@nkorobkov

Почему не получается заполнить структуру в СИ?

Задание:
Определить структуру с тремя полями, создать массив из 7 элементов типа данной структуры, заполнить его и вывести на экран. Столкнулся с проблемой: в структуре 3 поля: два из них - типа char, одно - типа int. При заполнении полей типа char, я использую функцию fgets(), при заполнении поля int использую обычный scanf(), при этом, после заполнения первого элемента массива структур, у меня пропускается заполнения первого поля следующего элемента массива... Вот как это выглядит:
c643c4de47d84004a5a6c2f2908e4888.png
Вот код самой программы:
#include <stdio.h>
#include <stdlib.h>

struct aeroflot{
    char nazn[20];
    char tip[20];
    int numr;
};
int main(){
    int i;
    struct aeroflot airport[7];
    for( i = 0; i < 7; i++ ){
        printf("Enter #%d flight nazn: ", i);
        fgets(airport[i].nazn, 20, stdin);
        printf("Enter #%d flight tip: ", i);
        fgets(airport[i].tip, 20, stdin);
        printf("Enter #%d flight numr:", i);
        scanf("%d", &airport[i].numr);

        printf("You entered:\n");
        fputs(airport[i].nazn, stdout);
        fputs(airport[i].tip, stdout);
        printf("\n%d", airport[i].numr);
    }

    return 0;
}

Помогите понять, в чем проблема и объясните как заполняют поле int в таких ситуациях... Может нужно юзать другие ф-ции?
  • Вопрос задан
  • 857 просмотров
Пригласить эксперта
Ответы на вопрос 3
@mikhail_404
Попробуйте очистить буфер в конце блока в цикле:
fflush(stdin)
Ответ написан
Поправьте 2 строчки:
scanf("%d", &airport[i].numr);
// =>
scanf("%d\n", &airport[i].numr);

printf("\n%d", airport[i].numr);
// =>
printf("%d\n", airport[i].numr);
Ответ написан
@abcd0x00
Используй fgets() + sscanf(). Через fgets() получаешь каждую строку, а через sscanf() достаёшь из неё нужные значения.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы