TODOPIC
Lenguajes de programación para PC => C, C#, C++ => Mensaje iniciado por: Ernie- 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:
#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é?
printf("Introducir la cadena de texto: ");
scanf("%31s", texto);
LEE_CADENA(texto,31);
Un saludo a todos.
-
¿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.
-
¿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 =)