13/06/2014, 12:37
|
| | Fecha de Ingreso: marzo-2012
Mensajes: 180
Antigüedad: 12 años, 8 meses Puntos: 2 | |
Respuesta: Cifrado César Buenas tengo el programa en este punto, me codifica gracias a vuestra ayuda perfectamente.
Como podría hacer para que la función decodificar lea solo la primera linea y con eso le asigno el valor a la variable?
La función decodificar me decodifica bien las minúsculas, pero las mayúsculas no me lo hace bien.
Gracias
Código:
#include <stdio.h>
#include <string.h>
void codificarText(int, char[]);
void decodificarText(char[]);
int llegirDesplacament();
int main(){
char original[50], opcio, fitxercodificat[50];
int desplacament = 0;
do{
printf("1)Codificar(C)\n");
printf("2)Decodificar(D)\n");
printf("3)Sortir del programa(S)\n\n");
printf("Tria una opció C, S: ");
opcio = getchar();
if(opcio !='\n') while(getchar() != '\n'); //fflush
if(opcio == 'c' || opcio == 'C'){
printf("Nom fitxer orignal: ");
scanf("%s", original);
desplacament = llegirDesplacament();
codificarText(desplacament, original);
if(opcio !='\n') while(getchar() != '\n'); //fflush
}else if(opcio == 'd' || opcio == 'D'){
printf("Nom fitxer codificat: ");
scanf("%s", fitxercodificat);
decodificarText(fitxercodificat);
if(opcio !='\n') while(getchar() != '\n'); //fflush
}
}while(opcio != 's' && opcio != 'S');
return 0;
}
int llegirDesplacament(){
int desplacament = 0;
printf("Desplaçament: ");
scanf("%d", &desplacament);
return desplacament;
}
void codificarText(int desplacament, char original[]){
FILE *fitxer;
FILE *codificat;
int i = 0;
char cadena[500], *extensio;
if((fitxer = fopen(original, "r"))){
while(fscanf(fitxer,"%c", &cadena[i])!=EOF){
if((cadena[i] + desplacament > 'z') || (cadena[i] + desplacament > 'Z' && cadena[i] + desplacament < 'a')){
cadena[i] = cadena[i] + desplacament - 26;
}else if((cadena[i] + desplacament > 'A' && cadena[i] + desplacament < 'Z') || (cadena[i] + desplacament > 'a' && cadena[i] + desplacament < 'z')){
cadena[i] = cadena[i] + desplacament;
}
else{
cadena[i] = cadena[i];
}
i++;
}
extensio = strrchr(original, '.');
original[extensio-original] = '\0';
strcat(original, ".coded");
if((codificat = fopen(original, "w"))){
fprintf(codificat,"%d\n%s", desplacament, cadena);
}
fclose(fitxer);
fclose(codificat);
printf("%s", cadena);
}else {
printf("Error");
}
}
void decodificarText(char fitxercodificat[]){
FILE *codificat;
FILE *decodificat;
int i = 0, desplacament = 4;
char cadena[500], *extensio;
if((codificat = fopen(fitxercodificat, "r"))){
while(fscanf(codificat,"%c", &cadena[i])!=EOF){
if((cadena[i] - desplacament < 'a') || (cadena[i] - desplacament < 'A')){
cadena[i] = (cadena[i] - desplacament) + 26;
}else if((cadena[i] - desplacament >= 'a' && cadena[i] - desplacament <= 'z') || (cadena[i] - desplacament >= 'A' || cadena[i] - desplacament <= 'Z')){
cadena[i] -= desplacament;
}
else{
cadena[i] = cadena[i];
}
i++;
}
extensio = strrchr(fitxercodificat, '.');
fitxercodificat[extensio-fitxercodificat] = '\0';
strcat(fitxercodificat, ".decoded");
if((decodificat = fopen(fitxercodificat, "w"))){
fprintf(decodificat,"%s", cadena);
}
fclose(codificat);
fclose(decodificat);
printf("%s", cadena);
}else {
printf("Error");
}
}
|