|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Torino (provincia)
Messaggi: 960
|
[C] scanf 'ignorate' dopo un CTRL+Z??
ciao a tutti!
ecco il mio problema: se premo CTRL+Z (ovvero EOF) durante una scanf o gets o simili, tutte le scanf o gets etc.. che seguono nel codice sono bellamente ignorate. Ho provato a bypassare il problema con un fflush(stdin); ma è stato completamente inutile. Come posso fare?? Ecco uno scorcio di programma giusto per rendervi conto. Codice:
#include <stdio.h>
main () {
int i = 1;
char str[30];
printf("Inserisci delle stringhe: CTRL+Z per terminare\n");
while (fgets(str, 255, stdin))
printf("stringa n°%d: %s\n", i++, str);
fflush(stdin); //inutile
printf("Inserisci un altra parola: ");
scanf("%s", str); //perchè lo salta??
printf("L'ultima parola è %s", str);
return 0;
}
__________________
Nel mercatino ho concluso con: eleoluca, huangwei, jai, ^v3rsus, Rinos, arvey, kinderboy. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Roma
Messaggi: 806
|
hai provato ha ripulire il buffer di input (str) con una memset() subito dopo la fflush()?
memset (str, 0, sizeof (str)); |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Torino (provincia)
Messaggi: 960
|
grazie per il tentativo ma purtroppo non funziona nemmeno così
__________________
Nel mercatino ho concluso con: eleoluca, huangwei, jai, ^v3rsus, Rinos, arvey, kinderboy. |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Roma
Messaggi: 806
|
Se devo essere sincero, a me la scanf() sulle stringhe non è mai piaciuta.
Ho sempre preferito usare la gets(), proprio per evitare problemi. |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Torino (provincia)
Messaggi: 960
|
ho paura che il problema sia legato a tutte le funzioni che usano stdin, infatti anche con la gets non funziona!!!
Non so è come se dopo aver premuto CTRL+Z nello stdin si attivasse un flag *mode ignore ON*, e non c'è verso di disattivarlo
__________________
Nel mercatino ho concluso con: eleoluca, huangwei, jai, ^v3rsus, Rinos, arvey, kinderboy. |
|
|
|
|
|
#6 | |
|
Bannato
Iscritto dal: May 2003
Città: Roma
Messaggi: 3642
|
Re: [C] scanf 'ignorate' dopo un CTRL+Z??
Quote:
premo ctrl+z, poi invio e lui mi chiede l'ultima stringa che stampa... sotto linux non l'ho provato però |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
CTRL+Z sugli Unix ha la funzione di EOF... In pratica chiude lo stdin... Su Windows viene semplicemente rilevato come caratttere EOF, ma non credo che faccia la stessa identica funzione...
Infatti se notate su Windows funziona anche senza fflush... Ultima modifica di cionci : 05-06-2004 alle 09:44. |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
Quote:
__________________
Gnu/Linux User
|
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Torino (provincia)
Messaggi: 960
|
grazie per le risposte!
Scusate per il ritardo ma c'è voluto un po' di tempo per smaltire la trasferta al Mugello Tornando a noi. Ho visto che alcuni non hanno problemi anche sotto windows, allora ho provato a cambiare compilatore! Purtroppo non ho Vc++ così ho effettuato prove solo con i 3 che ho a disposizione: 1. Turbo C++ 4.5 for windows: dopo CTRL+Z ignora tutte le funzioni che usano stdin. 2. Borland C++ per dos: dopo CTRL+Z ignora la prima funzione che usa stdin, dalla successiva tutto ok. 3. DevC++ 4.8: nessun problema, funziona alla perfezione! A questo punto mi sa proprio che è un bug di Turbo C++! Cmq se al posto di fgets metto while (scanf("%s", str) != EOF) le funzioni successive vengono ignorate da tutti i compilatori.. C'è quindi un ulteriore bug da scanf?
__________________
Nel mercatino ho concluso con: eleoluca, huangwei, jai, ^v3rsus, Rinos, arvey, kinderboy. |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Come dicevo...credo che il comportamento non sia ben defnito dallo standard...
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:55.



















