PDA

Visualizza la versione completa : [c] redirigere l'output


Peppewt
29-05-2004, 19:14
Salve qlk di voi mi saprebbe dire come si fa a dare in input un file sorgente?

x esempio: io ho un programma ke mi conta gli spazi vuoti, le lettere, ecc... mi dice di dargli come input il suo stesso file sorgente, mediante il comando: cnt_char<cnt_char.c .
Ecco il prog.

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int blank_cnt = 0, c, digit_cnt = 0, letter_cnt = 0,
nl_cnt = 0, other_cnt = 0;

while ((c == getchar()) != EOF)
if (c == ' ')
++blank_cnt;
else if (c >= '0' && c <= '9')
++digit_cnt;
else if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z')
++letter_cnt;
else if (c == '\n')
++nl_cnt;
else
++other_cnt;
printf("%10s%10s%10s%10s%10s%10s\n\n",
"blanks", "digits", "letters", "lines", "others", "total");
printf("%10d%10d%10d%10d%10d%10d\n\n",
blank_cnt, digit_cnt, letter_cnt, nl_cnt, other_cnt,
blank_cnt + digit_cnt + letter_cnt + nl_cnt + other_cnt);
system("pause");
return 0;
}

ok?
Ora come faccio a dargli come input il suo stesso file sorgente(salvato come .c)?
Spiegatemi pls... sto impazzendo... :dh: :dh: :dh:
Tnx all..


:ciauz:

Sergio Pedone
29-05-2004, 19:22
Dal titolo mi aspettavo tutto l'opposto.
Anche se non conosco il C, posso dirti
che devi utilizzare le funzioni apposite per leggere
un file, estraendone una riga, un carattere, quello che
pi ti serve. Poi riscrivi quello che hai messo nel
main in una funzione, magari adattandola al tipo di operazione
fatta in lettura sul file, esempio:
void leggi (char c);
void leggi (char* c);
ecc.
Mi sono stato spiegato? ;)

DaUlisse
29-05-2004, 19:23
nn ho capito se vuoi farlo in c oppure ti basta farlo sulla shell...
se sei in linux puoi usare la normale reindirezione con > (anche in dos si puo fare ma nn so come forse sempre con '<' '>')oppure se lo vuoi fare in c devi aprire il file come faresti normalmente...
pf=fopen("nomefile.c","rt");
o ancora puoi fare, almeno credo stdin="nomefile.c" -->chissa se funziona?

Peppewt
29-05-2004, 19:53
Guarda nn vi so rispondere, questo listato sul mio libro, e mi dice solo di dargli in input il suo stesso codice sorgente, tramite appunto il comando cnt_char<cnt_char.c, pu darsi che come hai detto tu, da dos, ma come si fa? :confused: :confused:

anx721
29-05-2004, 20:26
Devi fare esattamente come ti ha indicato il tuo libro:

cnt_char<cnt_char.c


funziona sotto dos, in questo modo si setta come standard input per il programma cnt_char.exe non quello che l'utente scrive sulla console, ma il contenuto del file passato (cnt_char.c); per la precisione io ottengo il seguente output:



blanks digits letters lines others total

96 32 327 26 176 657



Per farlo funzionare il file .c deve essere nella stessa cartella dell'eseguibile, e devi correggere un errore che hai fatto nel listato, sostituendo la riga

while ((c == getchar()) != 'a')

con

while ((c = getchar()) != EOF)

(nota che c' un solo '=' e non due come hai sritto tu!)

:ciauz:

Peppewt
29-05-2004, 20:40
Grazie milleeeeeeeeee!!! :mavieni: :mavieni:
Come mai x funziona sotto dos?
se voglio farlo funzionare diversamente, cio nn sotto dos?
Tnxxxxxxxxx ;) ;) ;) anx721



:ciauz:

anx721
29-05-2004, 20:52
Perche non dovrebbe funzionare sotto dos? penso che anche sotto linuz dovrebbe funzionare.

:ciauz:

Loading