|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: May 2001
Città: Milano
Messaggi: 3197
|
[C++] E strutture dati
Ciao a tutti, oggi mi hanno insegnato come si usano le strutture dati etc etc
Ho fatto un programma, ecco il codice: #include <stdio.h> #include <conio.h> struct alunni { char cognome[100]; char nome[100]; int voto; }; typedef struct alunni s_alunni; void main() { s_alunni classe[3]; int i; for(i=0;i<3;i++) { printf("\nCognome: "); gets (classe[i].cognome); printf("\nNome: "); gets(classe[i].nome); printf("\nVoto: "); scanf("%d",&classe[i].voto); } for(i=0;i<3;i++) { printf("\nCognome: %s", classe[i].cognome); printf("\nNome: %s", classe[i].nome); printf("\nVoto: %d", classe[i].voto); } getch(); } Il compilatore non mi da nessun errore, ma quando lancio il programma mi succede una cosa strana, al primo ciclo inserisco cognome , nome e voto senza nessun problema, al secondo ciclo, quando devo riinserire nome cognome e voto mi scrive: " Cognome: Nome: // mi sa inserire il nome saltando il cognome!! ![]() ![]() E come se al secondo ciclo di inserimento non mi vedrebbe il primo gets e quindi fa 2 printf e poi il gets per inserire il nome. Dove sta l'errore?? Ecco uno screen Shot: Ultima modifica di Gogeta ss4 : 26-11-2003 alle 19:21. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Dec 2001
Messaggi: 428
|
Prova a sostituire gets con scanf (ovviamente cambiando anche i parametri).
Non sono sicuro ma gets e printf potrebbero bufferizzare i caratteri differentemente. Eventualmente metti anche una flush al termine del blocco nel for. Ciao.
__________________
PC: Phenom 2 955, 4 GB RAM DDR3, 2 x ATI HD 7870 Ghz edition |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Dec 2001
Messaggi: 428
|
Forse il problema e' semplicemente questo:
inserendo bla bla non stai inserendo una stringa sola, ma due, e' per questo che la gets successiva salta una lettura. ciao.
__________________
PC: Phenom 2 955, 4 GB RAM DDR3, 2 x ATI HD 7870 Ghz edition |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Sep 2002
Città: Napoli
Messaggi: 542
|
ma quelle ke stai usando non sono le librerie standard del C ?
le funzioni di i/o del c++ di solito usate sono cin e cout... se invece è possibile usare anke printf,scanf per il c++ kiedo venia.. p.s. altra notazione.. in c++ ormai non c'è bisogno più di scrivere ".h" per le librerie ke si includono... o almeno lo standard nuovo così prevede.. la nuova versione del file stdio.h per il c++ è cstdio Ultima modifica di Tortellone : 27-11-2003 alle 00:40. |
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
Quote:
![]()
__________________
Gnu/Linux User ![]() |
|
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Dec 2001
Messaggi: 428
|
Quote:
La scelta di quale funzioni usare dipende dall'abitudine di chi programma. Certamente usare solamente la leibreria del C++ e' piu' elegante e moderno. Ciao.
__________________
PC: Phenom 2 955, 4 GB RAM DDR3, 2 x ATI HD 7870 Ghz edition |
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: May 2001
Città: Milano
Messaggi: 3197
|
Allora problema risolto
Il problema sta nel fatto che alcune volte il gets da problemi ma nn con tutti i compilatori Ho messo ha tutti scanf e va ok, altrimenti si può usare la funzione che scuota il buffer dopo ogni gets: fflush(stdin); |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:55.