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,
No tienes permitido ver enlaces.
Registrate o Entra a tu cuenta
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.