#include <stdio.h>
<BR>int main(){
<BR> FILE *f;
<BR> int c;
<BR> f = fopen("prova.txt","w");
<BR> while((c=getc(stdin)) != EOF)
<BR> putc(c,f);
<BR> fclose(f);
<BR> return 0;
<BR>}
<BR>
<BR>Questo programma dovrebbe scrivere sul file "prova.txt", ciò che scrivo da tastiera nello stream stdin, ma dopo aver scritto da tastiera, devo dar Ctrl+c per uscire dal programma e nel file prova.txt non screive niente.
<BR>Sapreste dirmi in cosa sbaglio?
<BR>Grazie
<BR><br>
problema con lo stream stdin
Moderatore: Staff
Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
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.
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
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.
- useless
- Staff

- Messaggi: 3896
- Iscritto il: dom 12 ott 2003, 0:00
- Località: A place where the streets have no name
- Contatta:
problema con lo stream stdin
<!-- BBCode Quote Start --><TABLE BORDER=0 ALIGN=CENTER WIDTH=85%><TR><TD><font size=-1>Quote:</font><HR></TD></TR><TR><TD><FONT SIZE=-1><BLOCKQUOTE>
<BR>sukko@unholycathedral ~ $ gcc a.c
<BR>sukko@unholycathedral ~ $ ./a.out
<BR>ciao
<BR>sukko@unholycathedral ~ $ cat prova.txt
<BR>ciao
<BR></BLOCKQUOTE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE><!-- BBCode Quote End -->
<BR>come vedi, funziona. quando hai finito devi premere ctrl+d (che è EOF), e non ctrl+c, che interrompe il programma e gli impedisce di scrivere nel file! (cosa che, tra l´altro, può essere posticipata fino all´fclose () x motivi di buffering)
<BR>
<BR>comunque ne approfitto x darti qualche consiglio:
<BR>- la dichiarazione corretta di main è int main (void) o int main (int argc, char *argv[]). tutte le altre sono deprecated (in particolare le funzioni senza parametri vanno dichiarate usando void);
<BR>- controlla SEMPRE che i comandi importanti non siano falliti. nella fattispece ci vorrebbe un controllo sulla fopen:
<BR>if ((f = fopen (...)) != NULL) ...
<BR>
<BR>segui questi pochi consigli e continua così che vai bene
.<br>
<BR>sukko@unholycathedral ~ $ gcc a.c
<BR>sukko@unholycathedral ~ $ ./a.out
<BR>ciao
<BR>sukko@unholycathedral ~ $ cat prova.txt
<BR>ciao
<BR></BLOCKQUOTE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE><!-- BBCode Quote End -->
<BR>come vedi, funziona. quando hai finito devi premere ctrl+d (che è EOF), e non ctrl+c, che interrompe il programma e gli impedisce di scrivere nel file! (cosa che, tra l´altro, può essere posticipata fino all´fclose () x motivi di buffering)
<BR>
<BR>comunque ne approfitto x darti qualche consiglio:
<BR>- la dichiarazione corretta di main è int main (void) o int main (int argc, char *argv[]). tutte le altre sono deprecated (in particolare le funzioni senza parametri vanno dichiarate usando void);
<BR>- controlla SEMPRE che i comandi importanti non siano falliti. nella fattispece ci vorrebbe un controllo sulla fopen:
<BR>if ((f = fopen (...)) != NULL) ...
<BR>
<BR>segui questi pochi consigli e continua così che vai bene
problema con lo stream stdin
ti ringrazio molto, so che devo mettere il controllo sulla funzione fopen, infatti nel mio programma l´ho messo, ma nel post no per non perdere tempo a scrivere in quanto il problema sapevo che era un altro.
<BR>In ogni caso ti rinfgrazio molto perchè sei l´unico a risolvermi i problemi di programmazione.
<BR>Ciao e grazie ancora<br>
<BR>In ogni caso ti rinfgrazio molto perchè sei l´unico a risolvermi i problemi di programmazione.
<BR>Ciao e grazie ancora<br>
