Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 18 su 18
  1. #11
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Il while serve a svuotare il buffer dopo la scanf
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  2. #12
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    152
    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...

  3. #13
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    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.

  4. #14
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    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:

    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
    Sono solo tre funzioni da studiare per evitarti mille problemi con la pulitura del buffer.

  5. #15
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    fgets(buffer,100,stdin); // buffer contiene la stringa
    Tieni presente però che l'ultimo carattere potrebbe essere il \n che viene incluso nella stringa dalla fgets ... e bisogna eliminarlo.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #16
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    152
    ah ok.. perfetto... ora mi leggo qualcosa su fgets cosi mi toglo finalmente tutti questi problemi!
    grazie mille a tutti per l aiuto! ^^

  7. #17
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    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.
    Uso direttamente una funzione apposita, che lo elimina e alloca la memoria necessaria a contenere la stringa.
    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);
    }

  8. #18
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    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.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.