Título: scanf no lee vacío desde teclado? Publicado por: flacc en 30 Mayo 2012, 08:34 am Hola, estoy intruseando c otra vez, y se me ocurrió hacer que se ingresen números los cuales los iré guardando un array hasta que sin introducir nada solo se presione el enter en consola y se de por terminado el ingreso de valores. Mi problema es que si uso scanf la instrucción sigue repitiéndose hasta que escriba algo en la consola y le de enter, pero quiero hacerlo de la forma que mencioné anteriormente, mi otra opción es getch(), pero solo me lee un carácter nada mas.
No soy muy entendido en c, por lo que me gustaría saber de los mas entendidos si habrá alguna forma de que scanf tome un enter de consola sin escribir nada o alguna forma de que getch o getchar me sirvan para introducir números negativos o reales... no pido código por favor, solo alguna explicación o una aclaración si es que lo estoy haciendo mal ya que esto es bastante distinto a juguetear con python que es lo que acostumbrado... Saludos y gracias Título: Re: scanf no lee vacío desde teclado? Publicado por: x64core en 30 Mayo 2012, 09:51 am en un bucle while?
while(caracter != enter) { //obtener caracter y almacenarlo } podria ser con getch como decis, se detiene hasta que sea enter Título: Re: scanf no lee vacío desde teclado? Publicado por: Saberuneko en 30 Mayo 2012, 12:34 pm Te quedaría tal que así: Código
He probado, no funciona. Voy a revisarlo. *sigh!* Estoy oxidado. :-( Un Saludo. Título: Re: scanf no lee vacío desde teclado? Publicado por: TomaSs en 30 Mayo 2012, 14:03 pm Eso no hay forma de hacerlo, lo que si puedes hacer es leerlo en forma de cadena (carácter a carácter) y posteriormente pasarlo a entero, ya que al leer carácter a carácter si que puedes controlar la pulsación de enter únicamente.
Una vez leída esa cadena, ya sería cuestión de chequear si se han introducido caracteres inválidos, etc A! y el tamaño que podría tener esa cadena sería de 7 caracteres (6 + mas el fin de cadena), teniendo en cuenta los límites de los enteros, que van de -32767 to 32767 (incluido el signo negativo) EI: juntando mensajes. Aquí te va un programilla que te he hecho para sacar los números (de tipo double), después ya sería pasarlos a un array, lo cual sería tarea muy facil, y además con el entero que devuelve la función "obtenerNumero()" podrás controlar muy bien si los números introducidos son correctos ;) Código
Título: Re: scanf no lee vacío desde teclado? Publicado por: flacc en 31 Mayo 2012, 04:15 am Agradezco la ayuda a pesar de que no pedí código, después que escribir el mensaje, se me ocurrió dejar que el usuario introduzca números hasta que se le de la gana con getchar(), los convierto a números, y cada vez que encuentre un - lo que siga a la derecha será el entero, pero encuentro un problema para diferenciar números porque si el usuario ingresa -1, 400 y 3 mi vector imaginariamente se vería como -14003 lo que me impediría diferenciar que es que. Lo otro que estaba pensando que es un poco confuso, es hacer una lectura con scanf del teclado pasando todos los caracteres por medio de getchar(), y mientras sea distinto de "\0" mantener abierto el ingreso. Aunque no lo he probado por falta de tiempo ya le haré encajar a scanf un enter :xD...saludos
No funciona :(... paso a manosear el código de TomaSs... Título: Re: scanf no lee vacío desde teclado? Publicado por: theluigy13etv en 7 Septiembre 2012, 20:53 pm Puedes realizar la entrada desde un archivo de texto que contenga los números que deseas introducir
En la consola ejecutas el programa y le pasas el archivo de texto con la entrada: .... programa.exe < entrada.txt Y el programa debe de tener en su código fuente un bucle más o menos así: while(scanf("%d", &num) !=EOF) { } Título: Re: scanf no lee vacío desde teclado? Publicado por: xiruko en 8 Septiembre 2012, 05:56 am hola, aunque no pidieras el codigo estaba aburrido y he hecho mi version de lo que pides:
Código
Código: ~$ gcc enteros.c -o enteros espero que te sirva de ayuda y un saludo! Título: Re: scanf no lee vacío desde teclado? Publicado por: leosansan en 8 Septiembre 2012, 14:09 pm Sales con CTRL+Z Enter. NO es exactamente como pedías, pero menos da una piedra ;D ;D:
Código: #include <stdio.h> |