[Risolto][C] Bug del Terminale
- vbextreme
- Entusiasta Emergente
- Messaggi: 1214
- Iscrizione: domenica 12 gennaio 2014, 14:06
- Desktop: lxde
- Distribuzione: xubuntu 14.10
Re: [Risolto][C] Bug del Terminale
@zoff, proprio perché ho capito il contesto ho suggerito una "formulina"
output
flush
input
flush
In modo che si ottenga l'output/input voluto.
Con la speranza che tra qualche giorno, quando la scanf fallirà o l'output non sarà uscito si ricordi delle mie parole.
Al mio piccolo gli ho spiegato la differenza del 2 e 4 tempi prima di salire sulla sua "mini" cross, bisogna sapere le differenze se non si vuole cadere!
Poi naturalmente non si seguono sempre i consigli e durante un salto la moto è andata a sinistra e lui a destra a "volo d'angelo".
output
flush
input
flush
In modo che si ottenga l'output/input voluto.
Con la speranza che tra qualche giorno, quando la scanf fallirà o l'output non sarà uscito si ricordi delle mie parole.
Al mio piccolo gli ho spiegato la differenza del 2 e 4 tempi prima di salire sulla sua "mini" cross, bisogna sapere le differenze se non si vuole cadere!
Poi naturalmente non si seguono sempre i consigli e durante un salto la moto è andata a sinistra e lui a destra a "volo d'angelo".
- M_A_W_ 1968
- Scoppiettante Seguace
- Messaggi: 856
- Iscrizione: venerdì 15 febbraio 2013, 3:57
- Desktop: KDE
- Distribuzione: SuSE
- Sesso: Maschile
- Località: Un luogo geometrico
- Contatti:
Re: [Risolto][C] Bug del Terminale
Il nostro Zoff ha fatto delle osservazioni corrette e pregnanti.
Visto l'andamento generale dei forum, alcuni utenti più preparati o più curiosi covano da molto tempo un senso di insoddisfazione e incompletezza. Mancano stimoli interessanti, quelli che a loro volta motivano la partecipazione ai forum e attirano i "risponditori" in grado di risolvere i problemi posti, piccoli e grandi che siano - incluso ovviamente il sottoscritto, che si annoia terribilmente rispetto ai tempi gloriosi di FIDOnet. Questo sicuramente spiega, in buona parte, alcuni recenti eccessi di entusiasmo e la tendenza a generare approfondimenti più o meno OT (di cui assumo appieno la mia parte di responsabilità).
Purtroppo però a volte occorre discernere: se un esercizio banale o una domanda anche semplice posta da utenti più avanzati può stimolare un utile dibattito e creare un OT che alla fine arricchisce il forum, in altri casi l'OP proprio non ha i mezzi per capire più del 10% di quello che viene trattato, e allora non gli stiamo facendo un favore. E' una questione di sensibilità didattica.
D'altro canto, spesso nella discussione che ne scaturisce vengono fornite risposte parziali o non corrette, e quindi in questo modo si richiamano a caduta altre risposte e precisazioni (di solito il sottoscritto interviene proprio a questo punto) destinate più ad altri utenti che all'OP.
Riflettendo, credo che dal punto di vista dell'ordine del forum sarebbe preferibile, in questi casi, gemmare un thread separato quando ci si rende conto che la discussione è andata in orbita rispetto alle capacità di comprensione dell'OP. Questo per non lasciare in giro troppe risposte erronee o incomplete, nell'interesse della qualità del forum e dei futuri lettori, pur senza subissare di informazioni gli OP meno scafati.
Visto l'andamento generale dei forum, alcuni utenti più preparati o più curiosi covano da molto tempo un senso di insoddisfazione e incompletezza. Mancano stimoli interessanti, quelli che a loro volta motivano la partecipazione ai forum e attirano i "risponditori" in grado di risolvere i problemi posti, piccoli e grandi che siano - incluso ovviamente il sottoscritto, che si annoia terribilmente rispetto ai tempi gloriosi di FIDOnet. Questo sicuramente spiega, in buona parte, alcuni recenti eccessi di entusiasmo e la tendenza a generare approfondimenti più o meno OT (di cui assumo appieno la mia parte di responsabilità).
Purtroppo però a volte occorre discernere: se un esercizio banale o una domanda anche semplice posta da utenti più avanzati può stimolare un utile dibattito e creare un OT che alla fine arricchisce il forum, in altri casi l'OP proprio non ha i mezzi per capire più del 10% di quello che viene trattato, e allora non gli stiamo facendo un favore. E' una questione di sensibilità didattica.
D'altro canto, spesso nella discussione che ne scaturisce vengono fornite risposte parziali o non corrette, e quindi in questo modo si richiamano a caduta altre risposte e precisazioni (di solito il sottoscritto interviene proprio a questo punto) destinate più ad altri utenti che all'OP.
Riflettendo, credo che dal punto di vista dell'ordine del forum sarebbe preferibile, in questi casi, gemmare un thread separato quando ci si rende conto che la discussione è andata in orbita rispetto alle capacità di comprensione dell'OP. Questo per non lasciare in giro troppe risposte erronee o incomplete, nell'interesse della qualità del forum e dei futuri lettori, pur senza subissare di informazioni gli OP meno scafati.
Sì, un blog ce l'ho perfino io: gli è che mi manca il tempo...
"...in una società che sembra sempre più spaventata dai problemi troppo articolati e che rigetta come un corpo estraneo ogni elemento di complessità, sapremo ancora come utilizzare il parere degli esperti?"
"...in una società che sembra sempre più spaventata dai problemi troppo articolati e che rigetta come un corpo estraneo ogni elemento di complessità, sapremo ancora come utilizzare il parere degli esperti?"
-
- Imperturbabile Insigne
- Messaggi: 2739
- Iscrizione: mercoledì 16 gennaio 2013, 17:28
- Desktop: ubuntu-2d
- Distribuzione: Ubuntu 12.04.2 LTS i686
- Località: Airuno(Lecco)
Re: [Risolto][C] Bug del Terminale
Sul mio manuale è scritto chiaramente che flush(stdin) produce un comportamento indefinito ed è da evitare.
Poi sul fatto che scanf() sià insidiosa, nulla da dire.
Concordo anche sul fatto che l'OP conosce quello, non fgets, non getchar() ecc.. quindi non confondiamogli le idee.
Sono curioso però del flush(stdin)
Poi sul fatto che scanf() sià insidiosa, nulla da dire.
Concordo anche sul fatto che l'OP conosce quello, non fgets, non getchar() ecc.. quindi non confondiamogli le idee.
Sono curioso però del flush(stdin)
- vbextreme
- Entusiasta Emergente
- Messaggi: 1214
- Iscrizione: domenica 12 gennaio 2014, 14:06
- Desktop: lxde
- Distribuzione: xubuntu 14.10
Re: [Risolto][C] Bug del Terminale
come già ripetuto per ben due volte fflush(stdin) funziona solo su windows, su freebsd dovrebbe essere fpurge() e su GNU te la scrivi...
Il libro si ferma sicuramente allo standard senza esporre nient'altro.
Il libro si ferma sicuramente allo standard senza esporre nient'altro.
-
- Imperturbabile Insigne
- Messaggi: 2739
- Iscrizione: mercoledì 16 gennaio 2013, 17:28
- Desktop: ubuntu-2d
- Distribuzione: Ubuntu 12.04.2 LTS i686
- Località: Airuno(Lecco)
Re: [Risolto][C] Bug del Terminale
Mi sembrava la proponessi anche per GNU, anche in altri programmi, ma magari mia svistacome già ripetuto per ben due volte fflush(stdin) funziona solo su windows,
- M_A_W_ 1968
- Scoppiettante Seguace
- Messaggi: 856
- Iscrizione: venerdì 15 febbraio 2013, 3:57
- Desktop: KDE
- Distribuzione: SuSE
- Sesso: Maschile
- Località: Un luogo geometrico
- Contatti:
Re: [Risolto][C] Bug del Terminale
gila75 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4819584#p4819584][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Mi sembrava la proponessi anche per GNU, anche in altri programmi, ma magari mia svistacome già ripetuto per ben due volte fflush(stdin) funziona solo su windows,
Codice: Seleziona tutto
void ClearKeyboardBuffer(void)
{
register char ch;
do
{
ch = getchar();
} while (('\n' != ch) && (EOF != ch));
/* versione sintetica: while ((ch = getchar() != '\n') && (ch != EOF)); */
}
Sì, un blog ce l'ho perfino io: gli è che mi manca il tempo...
"...in una società che sembra sempre più spaventata dai problemi troppo articolati e che rigetta come un corpo estraneo ogni elemento di complessità, sapremo ancora come utilizzare il parere degli esperti?"
"...in una società che sembra sempre più spaventata dai problemi troppo articolati e che rigetta come un corpo estraneo ogni elemento di complessità, sapremo ancora come utilizzare il parere degli esperti?"
-
- Imperturbabile Insigne
- Messaggi: 2739
- Iscrizione: mercoledì 16 gennaio 2013, 17:28
- Desktop: ubuntu-2d
- Distribuzione: Ubuntu 12.04.2 LTS i686
- Località: Airuno(Lecco)
Re: [Risolto][C] Bug del Terminale
Infatti MAW conoscevo anche io quella versione, ma mi pareva, (ripeto pareva) che venisse proposto fflush anche per l'input.M_A_W_ 1968 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4820018#p4820018][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:gila75 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4819584#p4819584][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Mi sembrava la proponessi anche per GNU, anche in altri programmi, ma magari mia svistacome già ripetuto per ben due volte fflush(stdin) funziona solo su windows,Questa è l'unica versione "portable" che funziona decentemente un po' su tutti i sistemi PC-alike e con tutti i compilatori mainstream. Ovviamente la register viene semplicemente ignorata sui compilatori "moderni", mentre resta importante con quelli più datati.Codice: Seleziona tutto
void ClearKeyboardBuffer(void) { register char ch; do { ch = getchar(); } while (('\n' != ch) && (EOF != ch)); /* versione sintetica: while ((ch = getchar() != '\n') && (ch != EOF)); */ }
Vero anche per tornare un passo indietro che usando fgets() o getchar e componendo a mano l'input questi problemi diventano molto più rari.
Chi c’è in linea
Visualizzano questa sezione: UbuNuovo e 10 ospiti