Título: Que hago mal? compilar pero no ejecuta bien Publicado por: roser24 en 5 Mayo 2010, 20:46 pm Hola chicos,pues tal y como dice el titulo empeze a hacer el siguiente ejercicio no me da errores en la compilacion y ejecuta pero solo hasta cuando inserto la cadena.. probe con gets con scanf para leerla pero sigue igual,una vez le doy intro me da un error y se cierra .. :(,por favor si podeis mirarlo y si veis los errores indicarmelo,de momento solo quise validar la letra A ..Salu2
Código
Título: Re: Que hago mal? compilar pero no ejecuta bien Publicado por: Akai en 5 Mayo 2010, 20:59 pm el problema está aqui:
Código
Para imprimir una cadena con printf y %s no necesitas ir realizando printfs como si imprimiras carácter a carácter, %s indica que le pasas una cadena, y la imprimirá entera. Por tanto tienes dos opciones: Código Notese que no necesitamos el tamaño ni un contador en esta función. o bien, una solución mas similar a la función que daba problemas: Código
Título: Re: Que hago mal? compilar pero no ejecuta bien Publicado por: roser24 en 5 Mayo 2010, 21:15 pm Hola Akai,gracias por tu ayuda,corregi mi codigo y ejecuta pero me cuenta y me muestra solo la primera parte de la cadena es decir hasta que encuentra un /0,
quite la condicion de /0 en el for de la funcion pero me sigue haciendo lo mismo al ejecutar.. :( probe tmb con gets(cad) pero me ejecuta mal compilar si lo dejo con gets,.. estoy usando mal el gets? pongo mi codigo actual.. Código
Título: Re: Que hago mal? compilar pero no ejecuta bien Publicado por: roser24 en 5 Mayo 2010, 21:23 pm :oLes va a parecer raro seguramente pero si quito el \n de un printf exactamente del de visualizar,.. me ejecuta bien el conteo y la visualizacion de la cadena..
como puede ser posible esto? Título: Re: Que hago mal? compilar pero no ejecuta bien Publicado por: Akai en 5 Mayo 2010, 21:34 pm El problema, que no lo había pensado antes, es la "basura" que se queda por usar scanf, en concreto un \n de cuando pulsas la tecla enter para introducir el tamaño de la cadena. Y es lo que se come gets(cadena). Lo raro, es que te funcione si quitas un \n de un printf que nada tiene que ver con la entrada de datos.
Lo que se me ocurre, es hacer un gets justo después del scanf, para limpiar el n residual, que luego es machacado por el siguiente gets(cadena). Aun así es una forma un tanto.. sucia de hacerlo, existiendo otras funciones que permiten una entrada mas "limpia" de datos, pero no las conozco. el apaño temporal para el programa es: Código Título: Re: Que hago mal? compilar pero no ejecuta bien Publicado por: leogtz en 5 Mayo 2010, 21:50 pm Procura ponerle nombres significativos a las variables, ¿qué es eso de "l"?
Básate en esto: Código
Título: Re: Que hago mal? compilar pero no ejecuta bien Publicado por: roser24 en 5 Mayo 2010, 22:19 pm hola,bueno vereis ya corregi el codigo del programa,añadiendo una "basura".
Código
Leo ,mmm hay varias lineas de tu codigo que no he visto nunca y por ello no lo entiendo.. por ejemplo lo de "setbuf(stdin, NULL); "de todas maneras gracias =), Título: Re: Que hago mal? compilar pero no ejecuta bien Publicado por: cgvwzq en 5 Mayo 2010, 22:30 pm Lo del setbuf no lo he usado nunca, pero imagino que si no se usa buffer se imprime directamente en pantalla (sin necesidad de llenarlo o llegar a salto de linea o fin de fichero).
Y te recomiendo usar fgets en lugar de gets. Título: Re: Que hago mal? compilar pero no ejecuta bien Publicado por: roser24 en 5 Mayo 2010, 22:39 pm okis,de verdad chicos que mil gracias por todos vuestros consejos apartir de ahora usar fgets ;D
una cosilla el formato es fgets(cadena, n, stdin); n siempre sera el valor de i longitud sin contar el \0? o me olvido de los \0 con esta funcion? Título: Re: Que hago mal? compilar pero no ejecuta bien Publicado por: Littlehorse en 5 Mayo 2010, 22:43 pm setbuf (http://www.cplusplus.com/reference/clibrary/cstdio/setbuf/)
Con fgets es conveniente leer n-1 del espacio total de la cadena, para asegurarte que luego puedes finalizar la cadena con '\0', aunque la función igualmente lo hace por vos, es conveniente asegurarse. En C, lamentablemente, nunca te tienes que olvidar de los '\0'. Saludos! |