Repository 32bit  Forum
Repository 64bit  Wiki

(C) Fare una funzione pause();

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

Re: (C) Fare una funzione pause();

Messaggioda Dani » gio feb 21, 2008 23:47

boh ha scritto:
Dani ha scritto:
Che io sappia non c'è nulla di standard per ripulire il buffer in input, quindi uso qualcosa del genere dopo ogni getc() scanf()


Veramente ci sarebbe

Codice: Seleziona tutto
fflush(stdin);


No, non è standard, puo' avere effetti non previsti e soprattutto non funziona :) ho appena provato...
Dani
Linux 3.x
Linux 3.x
 
Messaggi: 1447
Iscritto il: mer apr 26, 2006 0:52
Desktop: gnome
Distribuzione: arch

Re: (C) Fare una funzione pause();

Messaggioda boh » ven feb 22, 2008 13:16

Non metto in dubbio quello che dici, però a noi l'hanno introdotta come un metodo per pulire il buffer in input.
Di che effetti non previsti parli?
"Be yourself. Everyone else is already taken." ~ Oscar Wilde
Avatar utente
boh
Linux 2.6
Linux 2.6
 
Messaggi: 943
Iscritto il: gio set 15, 2005 23:00
Località: Milano
Slackware: 14.1 (x64)
Kernel: 3.10.17
Desktop: KDE 4.10.5

Re: (C) Fare una funzione pause();

Messaggioda Mario Vanoni » ven feb 22, 2008 17:30

sardylan ha scritto:
Mario Vanoni ha scritto:@sardylan

La domanda e` ambigua (pausa?):

- vuoi che il programma aspetti ad infinitum la risposta
- vuoi che il programma aspetti tot tempo e poi continui autonomo se passato il tempo definito

Dovrebbe essere la prima... La mia idea era proprio di farmi una funzione pausa che potrei richiamare prima di dare il system("clear")... Cosi' da avere tutto il tempo di vedere con comodita' l'output, e poi, quando ho finito, premo un tasto per riprendere l'esecuzione del programma...
Grazie a tutti delle risposte... Appena finisco di risistemarmi il portatile provero' le varie soluzioni...


E` ambigua anche questa risposta:

- getchar(3) aspetta un INVIO od un EOF (Ctrl-D) per partire, metti 50 caratteri prima, non risponde
- vedi le sorgenti p. e. di top(1) come reagire subito ad un singolo carattere senza INVIO

system("clear") non e` affidabile, io uso sempre SYSTEM("clear")
imparato da AT&T SVR2 vent'anni fa, definito in qualche *.h

#define SYSTEM(s) (fflush(stdout), system(s))
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 20:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

Re: (C) Fare una funzione pause();

Messaggioda Dani » ven feb 22, 2008 18:32

boh ha scritto:Non metto in dubbio quello che dici, però a noi l'hanno introdotta come un metodo per pulire il buffer in input.
Di che effetti non previsti parli?


Credo sia un errore, se non ricordo male nella documentazione di fflush() stessa c'è scritto che puo' avere comportamenti inaspettati su stdin, devo controllare, inoltre praticamente tutti sconsigliano di usarla (a parte il fatto che non ha mai funzionato su linux, almeno sul mio sistema)...Su windows invece funziona, ma non ho mai trovato una spiegazione razionale :?
Dani
Linux 3.x
Linux 3.x
 
Messaggi: 1447
Iscritto il: mer apr 26, 2006 0:52
Desktop: gnome
Distribuzione: arch

Re: (C) Fare una funzione pause();

Messaggioda DaD » sab feb 23, 2008 16:11

boh ha scritto:
Dani ha scritto:
Che io sappia non c'è nulla di standard per ripulire il buffer in input, quindi uso qualcosa del genere dopo ogni getc() scanf()


Veramente ci sarebbe

Codice: Seleziona tutto
fflush(stdin);

Ecco, anche io per pulire il buffer dell'input ho sempre utilizzato fflush :?
Avatar utente
DaD
Linux 2.4
Linux 2.4
 
Messaggi: 371
Iscritto il: mer feb 07, 2007 18:19
Nome Cognome: Antonio Barra
Slackware: 13
Kernel: 3.0
Desktop: KDE 4
Distribuzione: Mac OS X

Re: (C) Fare una funzione pause();

Messaggioda sardylan » mar feb 26, 2008 11:09

OK... Ho provato fflush prima di getcahr per pulire lo stdin, ed ora fa il suo dovere...
E funziona benissimo anche il consiglio di Mario per la SYSTEM(s)... Grazie a tutti... Perfetto..
Avatar utente
sardylan
Linux 2.6
Linux 2.6
 
Messaggi: 993
Iscritto il: mar apr 24, 2007 8:21
Località: Cagliari
Nome Cognome: Luca Cireddu
Slackware: current 64bits
Kernel: 3.16
Desktop: KDE 4.5.5
Distribuzione: Debian - CLFS

Precedente

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite