Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión

 
Búsqueda Avanzada

15.707 Mensajes en 3.130 Temas- por 371 Usuarios - Último usuario: lasfirrot
Mayo 18, 2012, 05:04:18
Foro de Hispabyte.netProgramaciónLenguajes y ProgramaciónC / C++ (Moderador: D4MR0D)Tema: Leer y escribir espacios en blanco en C
Páginas: [1]   Ir Abajo
Imprimir
Autor Tema: Leer y escribir espacios en blanco en C  (Leído 3247 veces)
0 Usuarios y 2 Visitantes están viendo este tema.
Franki
Visitante
« : Noviembre 15, 2009, 02:10:18 »


Estoy haciendo un programa muy básico para traducir letras a morse.
Es un programa que hago para ir aprendiendo C y así poder ampliar conceptos.
La cosa es que ya puedo hacer que pase letras a morse, pero sin espacios, ya que si pongo espacios solo se almacena la primera palabra en el array.

Como puedo hacer que se almacenen los huecos o como hacer para leer y luego escribirlos?

Muchas gracias desde ya.
En línea
svoboda
Global Moderator
Experto
*****
Mensajes: 440



Ver Perfil
« Respuesta #1 : Noviembre 15, 2009, 03:48:46 »

Hola Franki. Todo depende de como estés leyendo los datos de entrada, ya que hay muchas funciones que permiten hacer esto. Están, entre otras, cin, scanf, getc, getchar, etc...

Por lo que interpreto de lo que dices, estás intentando leer todos los datos de entrada de una sola vez, y esto te funciona si no hay espacios, pero si los hay solo te lee hasta el primer espacio. Más o menos, es lo que he entendido, así que supongo que estarás utilizando cin o scanf o alguna similar.

Puedes probar varias cosas, leer los caracteres de uno en uno y simplemente cuando leas el espacio no trasformarlo a código morse. O leer palabras de una en una hasta leer el carácter de fin de linea.

Existen muchas formas de hacerlo, pero sin ver el código que estás haciendo no te puedo decir exactamente porque te falla en tu caso. Lo que he escrito solo son suposiciones que espero que te sirvan.
En línea
HQH
Administrator
Miembro Imprescindible
*****
Mensajes: 1.813



Ver Perfil
« Respuesta #2 : Noviembre 15, 2009, 04:05:31 »

Usando la funcion fgets
Código:
char *fgets(char *cadena, int n, FILE *stream);

Puedes leer en una cadena, el numero de caracteres que le digas siempre que esten en la misma linea (incluira espacios). Esta instruccion vale para la entrada estandard (teclado) y para ficheros tambien. Si quieres usar el teclado, simplemente en el parametro stream, pon stdin.

Seria algo asi
Código:
char cadena[100];
fgets(cadena,20,stdin);

Eso te leera 20 caracteres de una linea y los guardara en cadena.
En línea
Franki
Visitante
« Respuesta #3 : Noviembre 19, 2009, 10:15:32 »

Sí, estoy usando scanf. Os pongo el código para que veáis que os digo. Aviso que es de muy noob eh

Código:
#include <stdio.h>

int main (){
unsigned char frase[30];
int i;
int e;

printf("\n\nTraductor de Código Morse/Castellano\n\n");
printf("1. Para traducir de castellano a morse\n2. Para traducir de morse a castellano");
scanf(" %i", &i);
switch (i)
{
case 1:
printf("Escriba la frase (máximo 30 caracteres) en castellano para su traducción al morse\n");
scanf("%s", frase);
e=0;
while( frase[e] != '\0'){
if(frase[e] == 'a' ){
printf( ".- ");
e++;
}
if(frase[e] == 'b'){
printf( "-... ");
e++;
}
if(frase[e] == 'c'){
printf( "-.-. ");
e++;
}
if(frase[e] == 'c'){
printf( "-.-. ");
e++;
}
if(frase[e] == 'd'){
printf( "-. ");
e++;
}
if(frase[e] == 'e'){
printf( ". ");
e++;
}
if(frase[e] == 'f'){
printf( "..-. ");
e++;
}
if(frase[e] == 'g'){
printf( "--. ");
e++;
}
if(frase[e] == 'h'){
printf( ".... ");
e++;
}
if(frase[e] == 'i'){
printf( ".. ");
e++;
}
if(frase[e] == 'j'){
printf( ".--- ");
e++;
}
if(frase[e] == 'k'){
printf( "-.- ");
e++;
}
if(frase[e] == 'l'){
printf( ".-.. ");
e++;
}
if(frase[e] == 'm'){
printf( "-- ");
e++;
}
if(frase[e] == 'n'){
printf( "-. ");
e++;
}
if(frase[e] == 'o'){
printf( "--- ");
e++;
}
if(frase[e] == 'p'){
printf( ".--. ");
e++;
}
if(frase[e] == 'q'){
printf( "--.- ");
e++;
}
if(frase[e] == 'r'){
printf( ".-. ");
e++;
}
if(frase[e] == 's'){
printf( "... ");
e++;
}
if(frase[e] == 't'){
printf( "- ");
e++;
}
if(frase[e] == 'u'){
printf( "..- ");
e++;
}
if(frase[e] == 'v'){
printf( "...- ");
e++;
}
if(frase[e] == 'w'){
printf( ".-- ");
e++;
}
if(frase[e] == 'x'){
printf( "-..- ");
e++;
}
if(frase[e] == 'y'){
printf( "-.-- ");
e++;
}
if(frase[e] == 'z'){
printf( "--.. ");
e++;
}



}
printf( "\n");
break;
}
}


Entonces como veis no tengo nada de espacios por lo que la frase sale directamente sin espacios.

HQH, con fgets puedo leer espacios en blanco no? Pero a que equivaldrían para poder seguir usando la estructura que tengo? Porque tampoco lo sé.

Gracias por la ayuda.
En línea
svoboda
Global Moderator
Experto
*****
Mensajes: 440



Ver Perfil
« Respuesta #4 : Noviembre 19, 2009, 11:06:27 »

El espacio no es más que el carácter espacio así:
Código:
' '
Ejemplo:
Código:
//leer a
if(a == ' ')
     // Mensaje, He leído un espacio
En línea
Franki
Visitante
« Respuesta #5 : Diciembre 08, 2009, 12:12:08 »

Hola de nuevo, he probado eso (no pude sacar tiempos antes, lo siento) y ahora el código me queda tal cuál:

Código:
#include <stdio.h>

int main (){
char frase[30];
int i;
int e;

printf("\n\nTraductor de Código Morse/Castellano\n\n");
printf("1. Para traducir de castellano a morse\n2. Para traducir de morse a castellano");
scanf(" %i", &i);
switch (i)
{
case 1:
printf("Escriba la frase (máximo 30 caracteres) en castellano para su traducción al morse\n");
//scanf("%s", frase);
fgets(frase , 20, stdin);
e=0;
while( frase[e] != '\0'){
if(frase[e] == 'a' ){
printf( ".- ");
e++;
}
if(frase[e] == 'b'){
printf( "-... ");
e++;
}
if(frase[e] == 'c'){
printf( "-.-. ");
e++;
}
if(frase[e] == 'c'){
printf( "-.-. ");
e++;
}
if(frase[e] == 'd'){
printf( "-. ");
e++;
}
if(frase[e] == 'e'){
printf( ". ");
e++;
}
if(frase[e] == 'f'){
printf( "..-. ");
e++;
}
if(frase[e] == 'g'){
printf( "--. ");
e++;
}
if(frase[e] == 'h'){
printf( ".... ");
e++;
}
if(frase[e] == 'i'){
printf( ".. ");
e++;
}
if(frase[e] == 'j'){
printf( ".--- ");
e++;
}
if(frase[e] == 'k'){
printf( "-.- ");
e++;
}
if(frase[e] == 'l'){
printf( ".-.. ");
e++;
}
if(frase[e] == 'm'){
printf( "-- ");
e++;
}
if(frase[e] == 'n'){
printf( "-. ");
e++;
}
if(frase[e] == 'o'){
printf( "--- ");
e++;
}
if(frase[e] == 'p'){
printf( ".--. ");
e++;
}
if(frase[e] == 'q'){
printf( "--.- ");
e++;
}
if(frase[e] == 'r'){
printf( ".-. ");
e++;
}
if(frase[e] == 's'){
printf( "... ");
e++;
}
if(frase[e] == 't'){
printf( "- ");
e++;
}
if(frase[e] == 'u'){
printf( "..- ");
e++;
}
if(frase[e] == 'v'){
printf( "...- ");
e++;
}
if(frase[e] == 'w'){
printf( ".-- ");
e++;
}
if(frase[e] == 'x'){
printf( "-..- ");
e++;
}
if(frase[e] == 'y'){
printf( "-.-- ");
e++;
}
if(frase[e] == 'z'){
printf( "--.. ");
e++;
}
if(frase[e] == ' '){
printf( " ");
e++;
}


}
printf( "\n");
break;
}
}

Pero, cuando lo intento ejecutar ocurre esto:

Código:
$ ./morse


Traductor de Código Morse/Castellano

1. Para traducir de castellano a morse
2. Para traducir de morse a castellano1
Escriba la frase (máximo 30 caracteres) en castellano para su traducción al morse
qw

No traduce las letras, cuando con scanf si lo hacía, que hay mal?

Gracias de antemano.
En línea
HQH
Administrator
Miembro Imprescindible
*****
Mensajes: 1.813



Ver Perfil
« Respuesta #6 : Diciembre 09, 2009, 02:37:44 »

Se ve que al leer el numero, deja sin leer el caracter Intro (Caracter \n que has escrito al dar el intro).

Entonces, fgets te empieza a leer a partir de ese intro, y como lee hasta que encuentre un intro,no te lee nada.

Solucion : antes del fgets, usa la instruccion para borrar lo que se haya quedado en el buffer de entrada del teclado (stdin)
Código:
fflush(stdin);

Con esto funcionara, un saludo.
En línea
Páginas: [1]   Ir Arriba
Imprimir
Foro de Hispabyte.netProgramaciónLenguajes y ProgramaciónC / C++ (Moderador: D4MR0D)Tema: Leer y escribir espacios en blanco en C
Ir a:  


Tema diseñado por RJ-45 para Hispabyte.net basado en el
theme famouspadexx v.09 designed by Formado Comprido
Downloable here. My present to padexx.de