Hola, estaba intentando crear un programa sencillito para traducir un texto a morse. El caso es que no sé que está mal. El código es el siguiente:
(Por curiosidad, ¿cómo podría conseguir realizar el mismo algorirmo sin la biblitoecastring.h)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void cifrarmorse (char frase[], int a){
char letra;
switch (letra){
case 'a':
case 'A': printf("·- ");
break;
case 'b':
case 'B': printf("-··· ");
break;
case 'c':
case 'C': printf("-·-·" );
break;
case 'd':
case 'D': printf("-·· ");
break;
case 'e':
case 'E': printf("· ");
break;
case 'f':
case 'F': printf("··-· ");
break;
case 'g':
case 'G': printf("--· ");
break;
case 'h':
case 'H': printf("···· ");
break;
case 'i':
case 'I': printf("·· ");
break;
case 'j':
case 'J': printf("·--- ");
break;
case 'k':
case 'K': printf("-·- ");
break;
case 'l':
case 'L': printf("·-·· ");
break;
case 'm':
case 'M': printf("-- ");
break;
case 'n':
case 'N': printf("-· ");
break;
case 'o':
case 'O': printf("--- ");
break;
case 'p':
case 'P': printf("·--· ");
break;
case 'q':
case 'Q': printf("--·- ");
break;
case 'r':
case 'R': printf("·-· ");
break;
case 's':
case 'S': printf("··· ");
break;
case 't':
case 'T': printf("- ");
break;
case 'u':
case 'U': printf("··- ");
break;
case 'v':
case 'V': printf("···- ");
break;
case 'w':
case 'W': printf("·-- ");
break;
case 'x':
case 'X': printf("-··- ");
break;
case 'y':
case 'Y': printf("-·-- ");
break;
case 'z':
case 'Z': printf("--·· ");
break;
case '0': printf("----- ");
break;
case '1': printf("·---- ");
break;
case '2': printf("··--- ");
break;
case '3': printf("···-- ");
break;
case '4': printf("····- ");
break;
case '5': printf("····· ");
break;
case '6': printf("-···· ");
break;
case '7': printf("--··· ");
break;
case '8': printf("---·· ");
break;
case '9': printf("----· ");
break;
case '.': printf("·-·-·- ");
break;
case ',': printf("--··-- ");
break;
case '?': printf("··--·· ");
break;
case '"': printf("·-··-· ");
break;
case ' ': printf(" ");
break;
}
}
int main(int argc, char** argv){
int a;
char frase[95];
printf("Introduzca una frase:\n");
gets(frase);
a=strlen(frase);
cifrarmorse(frase,a);
return 0;
}
No le asignas ningún valor a letra, en algún momento tienes que asignar un valo
¿Esto es lo que estás buscando?
Fijate, ahí hice algunos arreglos, y funciona.
Gets se dejó de usar hace tiempo, mejor usa scanf.
EDITO: scanf lee la entrada hasta el primer espacio, entonces no deberías usar scanf tampoco. Creo que fgets o alguna función de esas, eso te dejo que lo investigues vos.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void cifrarmorse (char frase){
switch (frase){
case 'a':
case 'A': printf("·- ");
break;
case 'b':
case 'B': printf("-··· ");
break;
case 'c':
case 'C': printf("-·-·" );
break;
case 'd':
case 'D': printf("-·· ");
break;
case 'e':
case 'E': printf("· ");
break;
case 'f':
case 'F': printf("··-· ");
break;
case 'g':
case 'G': printf("--· ");
break;
case 'h':
case 'H': printf("···· ");
break;
case 'i':
case 'I': printf("·· ");
break;
case 'j':
case 'J': printf("·--- ");
break;
case 'k':
case 'K': printf("-·- ");
break;
case 'l':
case 'L': printf("·-·· ");
break;
case 'm':
case 'M': printf("-- ");
break;
case 'n':
case 'N': printf("-· ");
break;
case 'o':
case 'O': printf("--- ");
break;
case 'p':
case 'P': printf("·--· ");
break;
case 'q':
case 'Q': printf("--·- ");
break;
case 'r':
case 'R': printf("·-· ");
break;
case 's':
case 'S': printf("··· ");
break;
case 't':
case 'T': printf("- ");
break;
case 'u':
case 'U': printf("··- ");
break;
case 'v':
case 'V': printf("···- ");
break;
case 'w':
case 'W': printf("·-- ");
break;
case 'x':
case 'X': printf("-··- ");
break;
case 'y':
case 'Y': printf("-·-- ");
break;
case 'z':
case 'Z': printf("--·· ");
break;
case '0': printf("----- ");
break;
case '1': printf("·---- ");
break;
case '2': printf("··--- ");
break;
case '3': printf("···-- ");
break;
case '4': printf("····- ");
break;
case '5': printf("····· ");
break;
case '6': printf("-···· ");
break;
case '7': printf("--··· ");
break;
case '8': printf("---·· ");
break;
case '9': printf("----· ");
break;
case '.': printf("·-·-·- ");
break;
case ',': printf("--··-- ");
break;
case '?': printf("··--·· ");
break;
case '"': printf("·-··-· ");
break;
case ' ': printf(" ");
break;
}
}
int main(int argc, char** argv){
int a;
char frase[95];
printf("Introduzca una frase:\n");
scanf ("%s",frase);
a=strlen(frase);
int i;
for (i=0; i<a; i++)
cifrarmorse(frase[i]);
// Agregamos salto de linea al final.
printf ("\n");
return 0;
}
OUTPUT:
Introduzca una frase:
HOLA
···· --- ·-·· ·-
Usá fgets te dejo como: fgets (frase,sizeof(frase),stdin);
Deberías cambiarlo en el código que te pasé porque como te dije arriba scanf solo toma hasta el primer espacio.
Si pones "Hola" o "Hola Mundo" el programa con scanf solo toma Hola.
¡Saludos!
Para el problema de scanf:
scanf("%95[^\n]", frase);
Muchas gracias a todos por responder :D.
Aún estoy empezando a programar y me cuesta un poquito pulir los conceptos. He seguido vuestros consejos y funcionan todos correctamente, así que muchísimas gracias por vuestro tiempo.
¡Hasta otra!