View Full Version : [C] Problema gets()
ciao a tutti
il problema è che con i=1 (quindi alla seconda iterazione del ciclo for, mi salta il gets dell'artista e passa al titolo con un output di questo genere
Artista: Pinco Pallino
Titolo: Pinco
Titolo Album: Pallino
Durata: 260
Artista: Titolo: _
il codice è il seguente:
for(i=0;i<2;i++){
printf("Artista: ");
gets(vettMultimedia[i].artist);
printf("Titolo: ");
gets(vettMultimedia[i].title);
printf("Titolo album: ");
gets(vettMultimedia[i].albumTitle);
printf("Durata: ");
scanf("%d", &vettMultimedia[i].duration);
}
qualcuno sa aiutarmi?
Teo@Unix
19-05-2010, 11:57
può anche essere che artista è vuoto!?
può anche essere che artista è vuoto!?
ma quello è l'output in fase di input
cioè è quello che mi compare sullo schermo quando mi chiede di inserire i vari campi
DanieleC88
19-05-2010, 12:45
La scanf() non toglie '\n' dal buffer di input, così alla successiva gets() è come se tu ricevessi subito l'invio.
Non usare mai gets(), comunque, usa sempre fgets().
La scanf() non toglie '\n' dal buffer di input, così alla successiva gets() è come se tu ricevessi subito l'invio.
Non usare mai gets(), comunque, usa sempre fgets().
non esiste una soluzione???
fgets legge da file devo usare gets
DanieleC88
19-05-2010, 13:03
Una veloce soluzione è togliere a mano tutti i caratteri rimasti nel buffer finché non c'è un invio:
scanf(...);
while (getchar() != '\n') {
/* non fareniente di niente */
}
Comunque: http://www.cplusplus.com/reference/clibrary/cstdio/fgets/
Nessuno ti vieta di usare stdin come stream di input.
non lo so, non mi convince.
cmq inizialmente avevo provato con scanf che funziona alla grande se non fosse che quando vede uno spazio pensa che sto scrivendo già il campo successivo...:mc:
DanieleC88
19-05-2010, 14:04
non lo so, non mi convince.
Non ti convince la fgets()? :mbe:
Comincia ad usarla, invece! Purtroppo la gets() non fa alcun controllo sulla lunghezza dell'input, e ti espone a rischi di stack smashing e robaccia simile.
cmq inizialmente avevo provato con scanf che funziona alla grande se non fosse che quando vede uno spazio pensa che sto scrivendo già il campo successivo...:mc:
Be', sai com'è, la scanf() è fatta per leggere "campi", non per ricevere righe in input. :)
ciao ;)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.