Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [C] getchar e schermata "che passa oltre"

    Salve a tutti, ho la seguente stringa per l'acquisizione di stringhe da tastiera (per una serie di motivi preferisco questa soluzione ad una semplice scanf):

    codice:
    while((c=getchar())!=EOF && c!='\n')
    Il problema è che questo codice, inserito in una scelta di un menu (ovvero un ciclo while che ripete uno switch finchè la scelta non è 0) mi fa stampare subito il menu invece di "rimanere in attesa" come la scanf.

    Da cosa può dipendere?

    Vi ringrazio in anticipo,
    Neptune.
    "Estremamente originale e fantasioso" By darkiko;
    "allora sfiga crepuscolare mi sa che e' meglio di atmosfera serale" By NyXo;
    "per favore, già è difficile con lui" By fcaldera;
    "se lo apri te e invece di "amore" ci metti "lavoro", l'effetto è lo stesso" By fred84

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Facci vedere tutto il codice ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Ho risolto con un fflush(stdin) chiedo venia
    "Estremamente originale e fantasioso" By darkiko;
    "allora sfiga crepuscolare mi sa che e' meglio di atmosfera serale" By NyXo;
    "per favore, già è difficile con lui" By fcaldera;
    "se lo apri te e invece di "amore" ci metti "lavoro", l'effetto è lo stesso" By fred84

  4. #4
    Originariamente inviato da Neptune
    Ho risolto con un fflush(stdin) chiedo venia
    a me solo quello alle volte nno funzioan..

    oregon mi ha suggerito :
    while(getchar()!='\n') {}

    e ora mi funge

  5. #5
    Originariamente inviato da xnavigator
    a me solo quello alle volte nno funzioan..

    oregon mi ha suggerito :
    while(getchar()!='\n') {}

    e ora mi funge
    Cioè se gli inserisci le parentesi graffe anche solo vuote poi rimane in attesa? E dici che è una versione più funzionale dell'fflush()?
    "Estremamente originale e fantasioso" By darkiko;
    "allora sfiga crepuscolare mi sa che e' meglio di atmosfera serale" By NyXo;
    "per favore, già è difficile con lui" By fcaldera;
    "se lo apri te e invece di "amore" ci metti "lavoro", l'effetto è lo stesso" By fred84

  6. #6
    Evitate la fflush.

    "In some implementations this causes the input buffer to be cleared, but this is not standard behavior"

    Piuttosto usate

    codice:
    while(getchar()!='\n') {}
    o

    codice:
    while( (c = getchar()) != EOF && c != '\n');
    Cioè se gli inserisci le parentesi graffe anche solo vuote poi rimane in attesa
    quel ciclo, con il corpo vuoto, consuma i caratteri nel buffer di input (usando getchar) fino a che non incontra il carattere di newline, in modo che i successivi input non vengano saltati a causa del buffer sporco

  7. #7
    Originariamente inviato da Neptune
    Cioè se gli inserisci le parentesi graffe anche solo vuote poi rimane in attesa? E dici che è una versione più funzionale dell'fflush()?
    no per rimanere in attesa si usano ben altri comandi..

    quello è un ciclo che fa sempre la stessa cosa cioè il getchar fino a quando il buffer non si è ripulito

    è come fare

    codice:
    while(1) {
     if (getchar()=='\n')
       break;
    }
    giusto per farti capire cosa fa

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    oregon mi ha suggerito :
    while(getchar()!='\n') {}
    Veramente ho suggerito

    while(getchar()!='\n') ;

    ma è la stessa cosa ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Originariamente inviato da oregon
    Veramente ho suggerito

    while(getchar()!='\n') ;

    ma è la stessa cosa ...
    Ma io non la uso per svuotare i caratteri quel ciclo, lo uso proprio per leggerli in successione dalla tastiera finchè uno non preme invio.
    Il problema è che prima di iniziare a leggere avrei bisogno di svuotare il buffer oppure leggo porcherie. Dite che mi conviene fare prima un ciclo a vuoto che svuoti il buffer?
    "Estremamente originale e fantasioso" By darkiko;
    "allora sfiga crepuscolare mi sa che e' meglio di atmosfera serale" By NyXo;
    "per favore, già è difficile con lui" By fcaldera;
    "se lo apri te e invece di "amore" ci metti "lavoro", l'effetto è lo stesso" By fred84

  10. #10
    Originariamente inviato da oregon
    Veramente ho suggerito

    while(getchar()!='\n') ;

    ma è la stessa cosa ...

    vabè non c'era bisogno di chiarirlo


    ho messo le partentesi graffe vuote per rendere meglio l'idea

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.