Ver Mensaje Individual
  #9 (permalink)  
Antiguo 13/06/2014, 13:37
manelmanel8
 
Fecha de Ingreso: marzo-2012
Mensajes: 176
Antigüedad: 7 años, 10 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"); 
	}

}