Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C standard] scanf di un char da tastiera.

    codice:
    printf("\nPari o Dispari?\t");
    scanf("%c",&pd);
    Questo il mio sorgente.

    Solo che quando compilo ( e' un'applicazione per console -DOS-) e vado in esecusione mi salta l'imput di questo scanf...

    Che sbaglio?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,464
    Fallo vedere tutto il sorgente ...

  3. #3
    Oregon ha ragione,quando si vuole la soluzione ad un problema si deve mettere gli altri nella condizione di aiutarci e tu hai postato due righe di codice.Comunque dal poco che hai detto posso immaginare che sia il solito problema delle funzioni di input bufferizzate, prova a scrivere fflush(stdin); prima della scanf
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  4. #4
    Utente di HTML.it L'avatar di ibykos
    Registrato dal
    Feb 2005
    Messaggi
    201
    Penso anch'io che il problema sia quello.
    Solita spiegazione: la modalità di input predefinita (per gli amici "cooked") prevede che l'input ricevuto da tastiera possa essere fornito alle funzioni che lo richiedono solo quando viene premuto il tasto INVIO.
    Il tasto INVIO è un carattere come gli altri per cui viene aggiunto al fondo del buffer di input (è un buffer interno che può essere manipolato quando serve) e spedito al pari degli altri caratteri.
    Ora mettiamo il caso che ci siano due scanf("%c") di fila: appena l'utente immette il carattere (ad esempio 'a') e preme INVIO la prima riceverà il carattere 'a' e la seconda, trovando un carattere inutilizzato nel buffer di input se lo mangerà, con la spiacevole conseguenza che hai riscontrato.
    Il problema si risolve formalmente utilizzando una fflush(stdin) dopo ogni funzione di input "a rischio", oppure con dei trucchetti che è meglio evitare, come ad esempio l'uso improprio di una getchar() in modo da intercettare il carattere di troppo.

    Ciao!

  5. #5
    Grazie a tutti per le risposte.

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.