Il while serve a svuotare il buffer dopo la scanf
Il while serve a svuotare il buffer dopo la scanf
No MP tecnici (non rispondo nemmeno!), usa il forum.
quindi quando faccio uno scanf i dati da tastiera vengono memorizzati in un buffer che poi "liberato" da questo while..?
però ora ho un altro problema....
codice:void AggiungiUtente(plist p){ contatto k; printf("\ninserisci nome e cognome : "); scanf("%s",&k.nome); while(getchar()!='\n') {} printf("%s\n",k.nome); printf("\ninserisci numero di telefono: "); scanf("%d",&k.numero); while(getchar()!='\n') {} printf("%d\n",k.numero); inserisciTesta(&p,k); printf("\noperazione completata\n\n"); }
ora se metto nome e cognome cioè 2 stringhe, mi stampa solo la prima... io invece vorrei che stampasse qualsiasi cosa che gli metto da tastiera...
Non è proprio così ... il while serve solamente a liberare il buffer dai caratteri \n che non vengono eliminati.
Per l'altro problema, per inserire una "frase" composta da più stringhe separate, non utilizzare la scanf ma la fgets (vedi documentazione e fai una ricerca nel forum)
No MP tecnici (non rispondo nemmeno!), usa il forum.
Si fa molto prima ad ignorare le funzioni che lasciano sporco il buffer di input.
Non è molto difficile farlo senza la scanf, usi fgets e prendi in input un qualsiasi tipo di stringa che puoi anche convertire in intero o in double:
Sono solo tre funzioni da studiare per evitarti mille problemi con la pulitura del buffer.codice:char buffer[100]; fgets(buffer,100,stdin); // buffer contiene la stringa int i=atoi(buffer); // i contiene la stringa convertita in intero double d=atof(buffer); // d contiene la stringa convertita in double
Tieni presente però che l'ultimo carattere potrebbe essere il \n che viene incluso nella stringa dalla fgets ... e bisogna eliminarlo.fgets(buffer,100,stdin); // buffer contiene la stringa
No MP tecnici (non rispondo nemmeno!), usa il forum.
ah ok.. perfetto... ora mi leggo qualcosa su fgets cosi mi toglo finalmente tutti questi problemi!
grazie mille a tutti per l aiuto! ^^
Uso direttamente una funzione apposita, che lo elimina e alloca la memoria necessaria a contenere la stringa.Originariamente inviato da oregon
Tieni presente però che l'ultimo carattere potrebbe essere il \n che viene incluso nella stringa dalla fgets ... e bisogna eliminarlo.
Già che ci sono la posto, che potrebbe tornare utile:
codice:void input(char** buffer, FILE* fp) { char temp[80]; unsigned int length; fgets(temp,80,fp); length=strlen(temp); temp[length-1]=0; *buffer=(char*)malloc( length+1) * sizeof(char)); strcpy(*buffer,temp); }
Occhio ... perché se il numero di caratteri è pari alla lunghezza del buffer, l'ultimo carattere non è il '\n' ... il codice va quindi cambiato in
if(temp[length-1]=='\n') temp[length-1]=0;
No MP tecnici (non rispondo nemmeno!), usa il forum.