Hola, mi problema es que tengo un txt que dice "prueba1234567890" y el programa ( en C ) cifra dependiendo de la clave que le ponga, uso de llave 45, y cifra un carácter y otro no se salta y no se porque. Ejemplo:
prueba1234567890 ---> p]uXbO13579 | Eso muestra
prueba1234567890 ---> ]_XHOL | Eso debería mostrar
No muestra los caracteres en los cuales se trasforman los numero pero es como una caja con 4 caracteres pequenos como 001c o 001f
Si se dan cuenta se salta un carácter al cifrar les voy a dejar el código si es que me pueden ayudar estaría muy agradecido
#include <stdio.h>
#include <stdlib.h>
int main(){
int clave;
char c;
printf(" [>>] Introduca la clave de cifrado [0 - 255]\n");
scanf("%i",&clave);
FILE *file;
file = fopen("prueba.txt", "rb+");
while((c = fgetc(file)) != EOF){
fputc((c ^ clave), file);
}
fclose(file);
return 0;
}
Al parecer lo que sucede es que:
prueba1234567890
Leé el primer caracter 'p'
La posición queda después de la p e in serta ] (la p cifrada) sobrescribiendo la r.
Entonces Agarra la u, avanza un caracter y e ingresa X sobrescribiendo e.
Entonces agarra la b y la pone como O sobrescribiendo la a.
Por lo que queda p]uXbO
La idea sería que utilices (fseek) para volver un caracter atrás antes de hacer el fputc.
Saludos,
You are not allowed to view links.
You are not allowed to view links.
Register or Login or You are not allowed to view links.
Register or Login
Al parecer lo que sucede es que:
prueba1234567890
Leé el primer caracter 'p'
La posición queda después de la p e in serta ] (la p cifrada) sobrescribiendo la r.
Entonces Agarra la u, avanza un carácter y e ingresa X sobrescribiendo e.
Entonces agarra la b y la pone como O sobrescribiendo la a.
Por lo que queda p]uXbO
La idea sería que utilices (fseek) para volver un caracter atrás antes de hacer el fputc.
Saludos,
Ya lo arregle gracias a tu respuesta, pero quería saber si el problema se produce porque al usar una función como fputc o fgets tiene un contador y hace que el cursor que lee el archivo avance o algo así?
Al final el código quedo así:
#include <stdio.h>
#include <stdlib.h>
int main(){
int clave;
int i = 0;
char c;
printf(" [>>] Introduca la clave de cifrado [0 - 255]\n");
scanf("%i",&clave);
FILE *file;
file = fopen("prueba.txt", "rb+");
while((c = fgetc(file)) != EOF){
fseek(file, i, SEEK_SET);
i++;
fputc((c ^ clave), file);
}
i = 0;
fclose(file);
return 0;
}
Al parecer si, ambas avanzan.
http://www.cplusplus.com/reference/cstdio/fputc/ (http://www.cplusplus.com/reference/cstdio/fputc/)
https://www.tutorialspoint.com/c_standard_library/c_function_fgetc.htm (https://www.tutorialspoint.com/c_standard_library/c_function_fgetc.htm)
Sigue trayendo cosas de interes.