Struktura pomija element

0

Napisałem taki oto program.

#include <stdio.h>
#include <stdlib.h>
struct autor {
char imie[90];
char nazwisko[90];
float wiek;
}osoba;
int main()
{
   struct autor osoba[90];
   int i,licznik =0;
   int index=3;
for(i=0;i<index;i++)
{
               printf("podaj imie autora.\n");
               gets(osoba[i].imie);
               printf("podaj nazwisko\n");
               gets(osoba[i].nazwisko);
               printf("podaj wiek\n");
               scanf("%f",&osoba[i].wiek);
}
for(i=0;i<index;i++)
{
    printf("Imie: %s Nazwisko %s wiek %f\n",osoba[i].imie,osoba[i].nazwisko,osoba[i].wiek);
}
}
 

Po pierwszym przejściu pętli wszystko jest ok.
Niestety za drugim razem pomija "imię autora".
Pozostawia puste pole i przechodzi do "nazwiska".
Może mi ktoś wytłumaczyć dlaczego tak się dzieje ?

1

Dzieje się tak dlatego, że używasz gets i scanf naprzemiennie.

gets odczytuje dane dopóki nie napotka znaku nowej linii \n
scanf odczytuje tylko wpisaną liczbę pomijając \n

dlatego po przejściu do kolejnej struktury gets odczytuje znak \n który pozostał po ostatnim scanf i uznaje, że "zrobił swoje" :)

Mam nadzieję, że w miarę jasno napisałem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1