Newsgroup: it.comp.lang.c
Titolo: Terminare un programma in C, getchar() non funziona

Ciao a tutti
Compilando col Dev-C++vorrei
inserire un comando che aspetta un input da tastiera x uscire.
Uso il
getchar()
ma alle volte funziona, spesso no
come mai???
avete suggerimenti?
PS sono alle prime armi

avete suggerimenti?
usare un solo getchar() spesso non serve... se hai già letto degli
input da tastiera a volte non va... io per essere sicuro metto una
scanf alla fine del programma :-)

scanf alla fine del programma :-)
Ancora peggio... scanf() e' meglio non usarla mai.
Anche scanf() puo' saltare eventuali input gia' inseriti.
Per essere realmente sicuri, bisogna scrivere:
while (getchar() != '\n');
-- 
The Follet

 avete suggerimenti?
guarda per essere ancora piů SICURO usa questa funzione:
getch();
e funziona perfettamente....č una specie di repeat until keypressed del
Pascal.
Fly

Pascal.
Non e' standard e quindi potrebbe non essere presente su
tuttii compilatori. (ps.: keypressed e' TP, non Pascal).
-- 
The Follet


non sempre
int main ( void )
{
  char c;
  printf( "\n scrivi un carattere e premi invio :" );
  scanf( "%c",&c );
  printf( "\n chissa' se mi fermo per attendere il prossimo invio" );
  while (getchar() != '\n');
  return 0;
}
ciao
donCiccio

}
Se premo un tasto e poi batto invio funziona, se premo piu' di un
tasto e poi batto invio no... ora vediamo di spiegare perche'.
Usando il while(getchar() != '\n') si fa' un flush del buffer di
input, ovvero si prelevano tutti i caratteri presenti fino alla
newline.
A questo punto una successiva getchar() non trovando altri caratteri
aspetta che l'utente me digiti uno (anche solo un invio).
Nota: il buffer non funziona realmente cosi', ma per quanto riguarda
la getchar() questa ne e' un'ottima rappresentazione
buffer keyboard: [ a | b | c | d | \n | _ | _ | _ | _ | _ | _ ]
  la prima getchar() trasforma il buffer cosi':
buffer keyboard: [ b | c | d | \n | _ | _ | _ | _ | _ | _ | _ ]
  con il ciclo while (getchar() != '\n') si trasforma il buffer cosi':
buffer keyboard: [ _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ ]
  La getchar() successiva trovera' quindi il buffer vuoto e aspettera'
  pazientemente che l'utente batta invio.
Mox :)

 tuttii compilatori.
ah ok...beh, il DevC++ lo prende...gcc invece no....gli altri non so.
(ps.: keypressed e' TP, non Pascal).
si è vero.... mi pare bisogna mettere "uses crt " per farlo fungere...
Fly

e se l'utente preme subito invio senza il primo carattere? :-)
io credo che senza usare funzioni non standard non c'e' un modo univoco
di realizzare l'attesa di un tasto qualsiasi (e solo uno) cosi' come
richiesto.
ciao
donCiccio

 ha scritto nel messaggio
news:XePN7.210322$sq5.10...@news.infostrada.it...

Mettici system("pause");

  pazientemente che l'utente batta invio.
Quindi, se non
ho capito male, per essere sicuri che il programma vada avanti dopo la
pressione di un tasto + invio, devo inserire il seguente codice:
while(getchar() != '\n');
getchar();
Giusto? o non ho capito una mazza?
mick
--------------------------------
Inviato via 
http://usenet.iol.it
 

 getchar();
Direi il contrario... se vuoi che l'utente inserisca un valore e dopo debba
dare invio, puoi usare:
char MyFunction()
{
    int ch;
    printf("Premi un tasto e poi Invio.");
    // Qui attende il carattere
    while( (ch = getchar()) != EOF );
    // Qui attende l'invio
    while(getchar() != '\n');
    return (char)ch;
}
Lorenzo

Lorenzo
Ah..  Grazie! Ora provo il codice =))
Grazie
ancora.


while (getchar() != '\n');
forse č meglio scritto cosě... io cmq ho risolto il problema: uso il
compilatore da riga di comando cosě la finestra č sempre aperta e mi
vedo l'ouput in tutta calma ^_^