02/09/10 20:34
u064241
Salve a tutti
Ho fatto il seguente esercizio; passando da linea di comando:
mioprogramma.exe input.txt (C o D) K output.txt esegue la codifica o la decodifica di un file testo.
Rispettivamente C sta per codifica e D per decodifica, K è una costante intera che viene aggiunta al codice ascii. Mi sembra funzionare, ma perchè nell'output video mi inserisce un <null> (sia in C che in D) e nell'output testo ( solo in D) mi doppia l'ultimo carattere?
Ecco il codice:
Grazie a chi può aiutarmi e buona serata.
Ho fatto il seguente esercizio; passando da linea di comando:
mioprogramma.exe input.txt (C o D) K output.txt esegue la codifica o la decodifica di un file testo.
Rispettivamente C sta per codifica e D per decodifica, K è una costante intera che viene aggiunta al codice ascii. Mi sembra funzionare, ma perchè nell'output video mi inserisce un <null> (sia in C che in D) e nell'output testo ( solo in D) mi doppia l'ultimo carattere?
Ecco il codice:
/* Codifica e Decodifica */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <conio.h> #define MAX 1000 #define SPAZIO 32 typedef enum {FALSO,VERO} boolean; char *codifica(char *infname,int k, char *outfname); char *decodifica(char *infname,int k, char *outfname); int main(int argc, char **argv) { system("cls"); printf("--------------------------\n"); printf(" Codifica e Decodifica \n"); printf("--------------------------\n"); if(argc<5) // controllo argomenti { printf("\nErrore numero parametri !!\n"); printf("\nUso: %s" " <input-file> <parametri [C or D]> <K> <output-file>\n\n",argv[0]); } else { printf("\n\nControllo parametri ed esecuzione\n\n"); if ((strcmp(argv[2],"C"))==0) printf("%s", codifica(argv[1],atoi(argv[3]),argv[4])); else printf("%s", decodifica(argv[1],atoi(argv[3]),argv[4])); } printf ("\nPremi un tasto per uscire . . ."); printf ("\n"); getch(); return 0; } char *codifica(char *infname, int k, char *outfname) { FILE *fin, *fout; int esito=0; int valore=0; char s[MAX]; char c=0; int i=0; int n1=0; int posizione=0; boolean finito=FALSO; // CONTROLLO APERTURA E CREAZIONE FILE if ((fin=fopen(infname,"r"))==NULL) { fprintf (stderr,"\a\nErrore apertura %s\n",infname); exit(1); } if ((fout=fopen(outfname,"w"))==NULL) { fprintf (stderr,"\a\nErrore creazione %s\n",outfname); exit(1); } while (c != EOF) { c=getc(fin); s[posizione]=c; posizione++; for(; i<posizione && !finito; i++) { valore=s; esito=isalpha(valore); if (esito != 0) { if ((i==0)||(i%2==0)) { n1=toascii(valore); fprintf (fout,"%d\n",n1+k); printf ("%d\n",n1+k); } if (i%2 !=0) { n1=toascii(valore); fprintf(fout,"%d\n",n1-k); printf ("%d\n",n1-k); } } if (s == ' ') { n1=toascii(valore); fprintf (fout,"%d\n",n1); printf ("%d\n",n1); posizione++; } } finito=FALSO; i=posizione; } fclose(fin); fclose(fout); printf ("\nOK!\n\n"); } char *decodifica(char *infname,int k, char *outfname) { FILE *fin, *fout; unsigned char s[MAX]; int i=0; // CONTROLLO APERTURA E CREAZIONE FILE if ((fin=fopen(infname,"r"))==NULL) { printf ("\nErrore apertura %s\n",infname); exit(0); } if ((fout=fopen(outfname,"w"))==NULL) { printf ("\nErrore creazione %s\n",outfname); exit(0); } while (!feof(fin)) // leggo il file fino alla fine e lo inserisco nella stringa s { fscanf (fin,"%d", s); i=0; if ((s==0)||(s%2==0) && s != SPAZIO) { fprintf (fout,"%c\n",s-k); printf("%c\n",s-k); } if ((s%2 !=0) && (s != SPAZIO)) { fprintf(fout,"%c\n",s+k); printf("%c\n", s+k); } if (s ==SPAZIO) { printf("\n"); fprintf (fout,"\n"); } i++; } fclose(fin); fclose(fout); printf ("\n\nOK!\n\n"); }
Grazie a chi può aiutarmi e buona serata.
aaa