Autor Tema: ¿Cómo leer cadenas de caracteres con espacios incluidos?  (Leído 12186 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Ernie-

  • PIC12
  • **
  • Mensajes: 56
¿Cómo leer cadenas de caracteres con espacios incluidos?
« en: 27 de Febrero de 2010, 13:05:17 »
Bueno, pues eso.. que tengo esta macro para poder leer cadenas de caracteres completas, pero por algún motivo que se me escapa no consigo entender porque se salta la primera palabra procesada:

Código: [Seleccionar]
#define LEE_CADENA(cadena, tamano) \
 {\
  int bucle=0;\
  cadena[bucle]=getchar();\
  while((cadena[bucle]=='\n') || (cadena[bucle]=='\t')) cadena[bucle]=getchar();\
  while ((cadena[bucle]!='\n') && (bucle < (tamano-1))) \
   {\
    cadena[bucle]=getchar();\
    bucle++;\
   }\
  cadena[bucle]='\0';\
 }

Si le paso la cadena "Hola mundo", esta macro únicamente retorna la segunda palabra... ¿A alguien se le ocurre por qué?

Código: [Seleccionar]
    printf("Introducir la cadena de texto: ");
    scanf("%31s", texto);
    LEE_CADENA(texto,31);

Un saludo a todos.
La mitad del mundo tiene algo que decir, pero no puede; la otra mitad no tiene nada que decir, pero no calla. Robert Lee Frost.

Desconectado Geo

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 922
    • Mexchip
Re: ¿Cómo leer cadenas de caracteres con espacios incluidos?
« Respuesta #1 en: 02 de Marzo de 2010, 10:21:17 »
¿Para qué es la llamada a scanf?

Cuando tienes la llamada a scanf y escribes "hola mundo", scanf solo toma la primera palabra y la coloca en la variable texto, dejando el resto de lo que escribiste en el búfer de entrada. Cuando ejecutas el siguiente código, borras el contenido de la variable texto y como "mundo" quedó en el búfer, es lo que se asigna en primer lugar a la variable, de ahí que no encuentres la primera palabra.
La imaginación es el límite.
Visita mi blog, en inglés o en español :).
Mini curso de introducción a VHDL en MEXCHIP :-/

Desconectado Ernie-

  • PIC12
  • **
  • Mensajes: 56
Re: ¿Cómo leer cadenas de caracteres con espacios incluidos?
« Respuesta #2 en: 02 de Marzo de 2010, 18:25:43 »
¿Para qué es la llamada a scanf?

Cuando tienes la llamada a scanf y escribes "hola mundo", scanf solo toma la primera palabra y la coloca en la variable texto, dejando el resto de lo que escribiste en el búfer de entrada. Cuando ejecutas el siguiente código, borras el contenido de la variable texto y como "mundo" quedó en el búfer, es lo que se asigna en primer lugar a la variable, de ahí que no encuentres la primera palabra.

Tienes razón, vaya fallo más tonto.. Ya podía yo buscar fallos gordos si el problema estaba en esa tontería, no sé como no aprendo de este tipo de errores.

Saludos =)
La mitad del mundo tiene algo que decir, pero no puede; la otra mitad no tiene nada que decir, pero no calla. Robert Lee Frost.