Duda programación.

Bueno, no se exactamente si está bien puesto aqui el tema, lo siento si está mal puesto, bueno, os cuento, para aprobar un examen tengo que hacer un ejercicio:

#include
#include
#include
void codificacio(char o[], char p[], char q[]);
int main (int argc, char *argv[])
{
codificacio(argv[1],argv[2],argv[3]);
printf("Fitxer encriptat satisfactoriament!\n");
system("pause");
}

void codificacio(char o[], char p[], char q[])
{
FILE *f,*g;
char c;
if((f=fopen(o,"rt"))==NULL)
{
printf("Error fatal, no es troba el fitxer...\n");
return;
}
if((g=fopen(p,"wt"))==NULL)
{
printf("Error fatal, no es troba el fitxer...\n");
return;
}
while(c=(fgetc(f))!=EOF)
{
c=c+'q';
fputc(c,g);
}
fclose(g);
fclose(f);
}


Pero se hace mal porque el archivo de origen es:

"Hola que tal estem"

y me lo codifica asi:

"rrrrrrrrrrrrrrrrrr"


Lo siento por estar en catalán, pero es un follón cambiarlo todo, el caso es que mi principal problema del programa es que a través del tercer parametro (char q[]), no se como sumarle el numero a la letra, al ser ascii se sumaban por el código pero es que no me acuerdo, lo demás sé como hacerlo, solo que me quedado aqui y no se solucionarlo, muchas gracias por todo.
En este while del final...

while(c=(fgetc(f))!=EOF)
{
c=c+'q';
fputc(c,g);
}
fclose(g);
fclose(f);
}

cambialo por:

while((c=fgetc(f))!=EOF)

Es decir, el parentesis que englobaba el fgetc, tal como estaba, no servia para nada en absoluto, sin embargo, como te lo he puesto yo, te deberia corregir la funcion.
No te recomiendo que intentes comprimir tanto el codigo si no tienes un buen dominio... solo te liaras mas.

Por otra parte, en otra parte del codigo sumas, para encriptar, el VALOR ASCII de 'q', en lugar de la variable q que le pasas... solo que lo sepas xD

Tal como esta ahora, tu programa "encriptaria" sumando el valor ASCII de una Q minuscula, al valor ASCII de cada letra del txt...
c=c+'q'; ¿?
talvez deberia de probar con este codigo para convertir la q de string a un dato "x" en char o entero, depende del tipo de dato que elijas, lo he puesto con entero.

char dato;
int x=0;
int n=0;
while(q[n]!='\0'&&q[n]!='\n'){
x=x*10;
if(q[n]=0);
else if(q[n]=1) x=x+1;
else if(q[n]=2) x=x+2;
else if(q[n]=3) x=x+3;
else if(q[n]=4) x=x+4;
else if(q[n]=5) x=x+5;
else if(q[n]=6) x=x+6;
else if(q[n]=7) x=x+7;
else if(q[n]=8) x=x+8;
else if(q[n]=9) x=x+9;
else{
x=x/10;
printf("error, caracter no valido")
breack;
}
}
// conversion del int en char:
if(x<=0255&&x>=0) dato=((char)x);
else printf(error, numero demasoiado grande o pequeño)

y ahora haz

c=c+dato;

tenbgo otro conversor mas rapido, pero este es mas facil de entender.
2 respuestas