Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475

    [C] fgets() ritorna immediatamente nonostante fflush()

    Ciao a tutti, ho questo pezzo di codice:

    codice:
    Esame* read_keyb()
    {
        Esame* result = malloc(sizeof(Esame));
    
        printf("Nome: ");
        fflush(stdin);
        fgets(result->nome, 22, stdin);
    
        printf("Voto: ");
        scanf("%f", &result->voto);
    
        printf("Crediti: ");
        scanf("%d", &result->crediti);
    
        return result;
    }
    Che serve a leggere i dati di un esame dalla tastiera... Quando gira l'output è questo:

    codice:
    Nome: Voto:
    Dopodichè aspetta l'inserimento del voto.
    E' come se fosse rimasto un newline nello stdin e questo mi fa terminare subito la fgets(), ma com'è possibile, dato che appena prima ho chiamato fflush()!?
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

  2. #2
    Il comportamento di fflush applicato su stream di input non è definito dallo standard; alcune implementazioni (come quella Microsoft) gli fanno svuotare il buffer di input, altre (come quella GNU) non gli fanno fare nulla.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475
    Ma... ._.

    Bello schifo di cazzata xD

    Quindi come si potrebbe sostituire?
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

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 © 2024 vBulletin Solutions, Inc. All rights reserved.