Os expongo mi problema. He hecho esta pequeña beta y hay un par de cosas que no entiendo para nada:
1) Por qué cuando aumento el tamaño de la cadena (ponte una parrafada de 1000 caracteres) no funciona la opción de codificar. Me direis que es por el fgets y por el tamaño de la matriz, pero no, cambiad ambos el 100 por un 1000... y aun así, a mi no me funciona. Me da el output una B.
2) ¿Cómo puedo hacer para que las 'ñ' se presenten bien sin ponerme a hacer una función exclusiva sólo para mostrar una 'ñ'?
3) ¿Y los espacios en blanco? Me gustaría que, al encriptar, se comiese todos los espacios en blanco, y al desencriptar, los pusiese. ¿Es posible?
Gracias :)
Código C:
Ver original/*Codificador de frases y/o palabras*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*Alfabeto para codificación por "Cesar"*/
char *claro="abcdefghijklmnñopqrstuvwxyz,.?!";
char *oculto ="DEFGHIJKLMNÑOPQRSTUVWXYZABC*-=&";
/*prototipos de funciones*/
void codificar(char *frase);
void decodificar(char *frase);
void flush_stdin(void);
main()
{
int m;
char frase[100];
do{
puts("\t1.- Codificar una frase"); puts("\t2.- Decodificar una frase"); puts("\t3.- Definir el algoritmo de codificacion"); flush_stdin();
switch(m)
{
case 1:
printf("Introduzca una frase: "); fgets(frase
, 100, stdin
); codificar(frase);
printf("La frase codificada es: "); puts("\tPulse cualquier tecla para continuar..."); break;
case 2:
printf("Introduzca una frase codificada: "); fgets(frase
, 100, stdin
); decodificar(frase);
printf("La frase decodificada es: "); puts("\tPulse cualquier tecla para continuar..."); break;
case 3:
puts("Que algoritmo desea utilizar?"); puts("1.- Codigo de Caesar con 3 desplazamientos"); puts("2.- [No disponible]"); flush_stdin();
case 4:
break;
default:
puts("\tNo ha seleccionado ninguna opción del menu"); }
while(m != 4);
}
void codificar(char *frase)
{
int i,j;
{
{
if(*(frase+j)==*(claro+i))
{
*(frase+j)=*(oculto+i);
}
}
}
}
void decodificar(char *frase)
{
int i,j;
{
{
if((*(frase+j))==*(oculto+i))
{
*(frase+j)=*(claro+i);
}
}
}
}
void flush_stdin(void)
{
int ch;
while( (ch
= getchar()) != '\n' && ch
!= EOF
); }