Input in C
Ciao,
forse mi sfugge qualcosa di banale ma ho un problema con la lettura di un dato da tastiera
int dato;
scanf("%d", &dato);
per quale motivo il dato non viene letto ?
forse mi sfugge qualcosa di banale ma ho un problema con la lettura di un dato da tastiera
int dato;
scanf("%d", &dato);
per quale motivo il dato non viene letto ?
Risposte
"n.icola":
per quale motivo il dato non viene letto ?
In che senso non viene letto?
La scanf mi restituisce EOF e non ne capisco il motivo
"n.icola":
La scanf mi restituisce EOF e non ne capisco il motivo
Come contenuto di "dato"? O come valore di ritorno? Comunque è strano perchè è corretta...
Ora devo scappare, se hai la possibilità prova a fare il debug per vedere cosa combina...
Si, il valore restituito da quell'espressione li è EOF, dato non viene toccato e perciò pensavo fosse dovuto a qualcosa rimasto nello stdin
quindi ho cercato un pò e ho trovato la fflush() ma il risultato non cambia
ciao e grazie lo stesso
quindi ho cercato un pò e ho trovato la fflush() ma il risultato non cambia
ciao e grazie lo stesso
Sei riuscito a risolvere?
Ma questo problema te lo fa in un "grosso" programma oppure anche in due righe di codice? Cioè se il programma è questo:
Ti da lo stesso problema?
Ma questo problema te lo fa in un "grosso" programma oppure anche in due righe di codice? Cioè se il programma è questo:
#include <stdio.h> int dato; int main() { printf("%d", scanf("%d", &dato)); printf("%d", dato); }
Ti da lo stesso problema?
Fonamentalmente il problema è il seguente:
scanf prende l'intero digitato, ma in questo programma non viene digitato niente.
scanf prende l'intero digitato, ma in questo programma non viene digitato niente.
#include <stdio.h> main() { int dato; printf("digita l'intero e premi enter"); scanf("%d", &dato); printf("hai digitato: %d", dato); }
"Anony_":
Fonamentalmente il problema è il seguente:
scanf prende l'intero digitato, ma in questo programma non viene digitato niente.
#include <stdio.h> main() { int dato; printf("digita l'intero e premi enter"); scanf("%d", &dato); printf("hai digitato: %d", dato); }

sorry, ho capito male il suo problema...
"Anony_":
Fonamentalmente il problema è il seguente:
scanf prende l'intero digitato, ma in questo programma non viene digitato niente.
#include <stdio.h> main() { int dato; printf("digita l'intero e premi enter"); scanf("%d", &dato); printf("hai digitato: %d", dato); }
Ma ti da EOF nel senso che ti chiude la finestra perché in tal caso il problema non sta nello scanf ma nel fatto che non hai bloccato il programma dandoti il tempo di leggere ed è finito.
Comunque metti anche qualche '\n' per impaginare meglio i risultati. un int prima del main e un return 0 alla fine.
"vict85":
[quote="Anony_"]Fonamentalmente il problema è il seguente:
scanf prende l'intero digitato, ma in questo programma non viene digitato niente.
#include <stdio.h> main() { int dato; printf("digita l'intero e premi enter"); scanf("%d", &dato); printf("hai digitato: %d", dato); }
Ma ti da EOF nel senso che ti chiude la finestra perché in tal caso il problema non sta nello scanf ma nel fatto che non hai bloccato il programma dandoti il tempo di leggere ed è finito.
Comunque metti anche qualche '\n' per impaginare meglio i risultati. un int prima del main e un return 0 alla fine.[/quote]
No, quello è solo un esempio postato per capire quale fosse il problema,
non so per quale motivo ma credo che il compilatore stia facendo i capricci.
Forse la dico grossa ma è possibile che la scanf mi restituisce EOF perchè i due stream principali, stdin e stdout, sono chiusi ?
"n.icola":
No, quello è solo un esempio postato per capire quale fosse il problema,
non so per quale motivo ma credo che il compilatore stia facendo i capricci.
Forse la dico grossa ma è possibile che la scanf mi restituisce EOF perchè i due stream principali, stdin e stdout, sono chiusi ?
Bè a meno che non venga chiuso dal programma stesso non credo, certo che se fosse chiuso non riusciresti di sicuro a leggere nulla. Però non capisco come possa essere chiuso...
Vediamo qualcos'altro, che sistema operativo e compilatore stai usando?
Altra cosa, se ad esempio usi la funzione getc() o getchar() cosa succede?
"enigmagame":
Vediamo qualcos'altro, che sistema operativo e compilatore stai usando?
Altra cosa, se ad esempio usi la funzione getc() o getchar() cosa succede?
Windows xp, come compilatore Borland turbo - C v 2.01, la getc() non l'ho mai usata ma la getchar() da lo stesso problema della scanf(),
ne sono più che sicuro, non so per quale motivo ma lo stdout sembra essere chiuso infatti il programma è ormai ridotto all'osso
#include<stdio.h> main() { int dato; scanf("%d", &dato); }
e se provo a salvare lo stesso codice come nuovo file e compilarlo, stranamente il tutto funziona

grazie di tutto lo stesso,
ultimamente sto giocando con il visual C++ express, l'ho scoperto grazie a te,
e anche se è pieno di roba che probabilmente non utilizzerò mai trovo comode alcune possibilità come quella di visualizzare un'intera lista o strutture simili
piuttosto di saltare di nodo in nodo
ciao
Forse la dico grossa ma è possibile che la scanf mi restituisce EOF perchè i due stream principali, stdin e stdout, sono chiusi ?
Beh.. si

scanf è di fatto un alias a fscanf(stdin, ...) - legge i dati da stdin, immagino che se stdin è chiuso, per forza ritorni sempre EOF.
Leggi il man a: http://www.manpagez.com/man/3/scanf/
Quindi posso immaginare (ma potrei sbagliare) che tu abbia bisogno di:
- o redirigere stdin da qualche parte prima di chiudere l'originale (ti consiglio di leggere il man di "dup2()" e "pipe()" )
- o usare fscanf e dirgli da quale stream deve leggere
Ciao!
Fabio