program omija gets

0

Witam. Prosiłbym o wyjaśnienie, dlaczego funkcja nie działa jak powinna. Oto program (nie jest jeszcze dokonczony, chce sie dowiedziec co robie nie tak przy korzystaniu z gets). Efekt odpalenia programu rowniez zalaczam. Chodzi o to, ze program nie czeka na podanie ciagu znakow, tylko od razu przeskakuje do Podaj tytul. Wiem, ze to podstawy jednak nie moge sie dokopac tego w googlach. Z gory wielkie dzieki.

#include <stdio.h>
#include <stdlib.h>

struct ksiazka{
char autor[30], tytul[50];
int rokWydania, liczbaStron;
double cena;
char wypozyczona;
int ileWypozyczen;
};

void wypelnienie(int n, struct ksiazka *tab)
{
    int i;
    for(i=0;i<n;i++)
    {
        printf("Podaj autora: \n");
        gets(tab[i].autor);
        printf("Podaj tytul:\n");
        gets(tab[i].tytul);
        printf("Podaj liczbe stron:\n");
        scanf("%d",&tab[i].liczbaStron);
        printf("Podaj rok wydania:\n");
        scanf("%d",&tab[i].rokWydania);
        printf("Podaj cene oraz liczbe wypozyczen:\n");
        scanf("%lf %d",&tab[i].cena,&tab[i].ileWypozyczen);
    }
}

int main()
{
    int n;
    struct ksiazka *tabela;
    printf("Ile ksiazek chcesz wprowadzic?\n");
    scanf("%d",&n);
    tabela=malloc(n*sizeof(struct ksiazka));
    wypelnienie(n,tabela);

}
 
1

przed: printf("Podaj autora: \n");
zapodaj: while(getchar()!='\n'){}

0

Czy to dlatego ze gets zamienia \n na \0? Gdzies chyba czytalem

1

Nie, zwyczajnie scanf("%d",... zostawia entera w buforze klawiatury.

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