Título: C - Problema con scanf y string Publicado por: Xargam en 15 Abril 2018, 20:21 pm Hola gente, estoy haciendo una funcion que pide string (caracteres limitados). Tengo una funcion en la que al scanf le asigne %[^\n] para que tome los espacios del string. Tambien quiero tener otra funcion que pida string hasta que encuentre un espacio, por lo que cambie la mascara por %s. Encontre un problema grave en esta segunda funcion:
Código
Al momento de ser ejecutada en un bucle for de 3 iteraciones y guardado el string en una matriz con este codigo: Código
Si yo escribo "SPORE ES BUENO" el bucle for no me pide la segunda y la tercera vez que ingrese string. Muestra la matriz con SPORE en indice 0, ES en el indice 1 y BUENO en el indice 2. Miren: (http://i66.tinypic.com/15bjwk.png) (http://i63.tinypic.com/29vl8qt.png) Título: Re: C - Problema con scanf y string Publicado por: MAFUS en 15 Abril 2018, 21:22 pm Cambia lo de setbuf(stdin, NULL); por while(getchar()!='\n'); tal que así:
Código stdin, stdout y stderr todo y que son tratados como archivos no lo son, y por esa razón tienen sus manías. Título: Re: C - Problema con scanf y string Publicado por: Xargam en 15 Abril 2018, 21:41 pm Excelente ahora funcione perfecto!!! gracias pero no entendi que es lo que hace ese codigo... Si ingreso "spore es bueno", me queda " es bueno\n" en el buffer. Como un bucle while vacio limpia el buffer??'
Título: Re: C - Problema con scanf y string Publicado por: MAFUS en 15 Abril 2018, 22:40 pm Cuando capturas una frase que contenga espacios el %s de scanf adquiere datos hasta llegar al primer espacio en blanco.
Los datos restantes quedarán en el buffer y al volver a usar scanf adquirirá desde la última posición en que quedó. Nosotros, al concluir un escrito con la tecla RETURN, añadimos al final de todo un carácter de nueva línea '\n' y eso lo podemos usar como marcador de final de buffer stdin. Código: while(getchar()!='\n'); Título: Re: C - Problema con scanf y string Publicado por: Xargam en 16 Abril 2018, 04:10 am Lo entendi muchas gracias compa!
|