Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/06/2012, 09:01
Javieer-G
 
Fecha de Ingreso: diciembre-2008
Mensajes: 50
Antigüedad: 15 años, 4 meses
Puntos: 0
Problema con la longitud de la cadena

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
  1. /*Codificador de frases y/o palabras*/
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6.  
  7. /*Alfabeto para codificación por "Cesar"*/
  8. char *claro="abcdefghijklmnñopqrstuvwxyz,.?!";
  9. char *oculto ="DEFGHIJKLMNÑOPQRSTUVWXYZABC*-=&";
  10.  
  11. /*prototipos de funciones*/
  12. void codificar(char *frase);
  13. void decodificar(char *frase);
  14. void flush_stdin(void);
  15.  
  16. main()
  17. {
  18.     int m;
  19.     char frase[100];
  20.    
  21.     do{
  22.     system("clear");
  23.     puts("\t\tMENU\n");
  24.     puts("\t1.- Codificar una frase");
  25.     puts("\t2.- Decodificar una frase");
  26.     puts("\t3.- Definir el algoritmo de codificacion");
  27.     puts("\t4.- Salir");
  28.     printf("Opción: ");
  29.     scanf("%d", &m);
  30.     flush_stdin();
  31.    
  32.  
  33.     switch(m)
  34.     {
  35.     case 1:
  36.     printf("Introduzca una frase: ");
  37.     fgets(frase, 100, stdin);
  38.     codificar(frase);
  39.     printf("La frase codificada es: ");
  40.     puts(frase);
  41.     puts("\tPulse cualquier tecla para continuar...");
  42.     getchar();
  43.     break;
  44.  
  45.     case 2:
  46.     printf("Introduzca una frase codificada: ");
  47.     fgets(frase, 100, stdin);
  48.     decodificar(frase);
  49.     printf("La frase decodificada es: ");
  50.     puts(frase);
  51.     puts("\tPulse cualquier tecla para continuar...");
  52.     getchar();
  53.     break;
  54.  
  55.     case 3:
  56.     system("clear");
  57.     puts("Que algoritmo desea utilizar?");
  58.     puts("1.- Codigo de Caesar con 3 desplazamientos");
  59.     puts("2.- [No disponible]");
  60.     printf("Opción: ");
  61.     scanf("%d", &m);
  62.     flush_stdin();
  63.    
  64.     case 4:
  65.     break;
  66.    
  67.     default:
  68.     puts("\tNo ha seleccionado ninguna opción del menu");
  69.     }
  70.     system("clear");}
  71.     while(m != 4);
  72. }
  73.  
  74. void codificar(char *frase)
  75. {
  76.     int i,j;
  77.     for(j=0;j<strlen(frase);j++)
  78.     {
  79.       for(i=0;i<strlen(claro);i++)
  80.       {
  81.          if(*(frase+j)==*(claro+i))
  82.          {
  83.          *(frase+j)=*(oculto+i);
  84.          }
  85.       }
  86.     }
  87. }
  88.  
  89.  
  90. void decodificar(char *frase)
  91. {
  92.     int i,j;
  93.     for(j=0;j<strlen(frase);j++)
  94.     {
  95.       for(i=0;i<strlen(claro);i++)
  96.       {
  97.          if((*(frase+j))==*(oculto+i))
  98.          {
  99.          *(frase+j)=*(claro+i);
  100.          }
  101.       }
  102.     }
  103. }
  104.  
  105. void flush_stdin(void)
  106. {
  107.    int ch;
  108.    while( (ch = getchar()) != '\n' && ch != EOF );
  109. }