Autor
|
Tema: Ayuda para instrucciones if-else y while() (Leído 3,971 veces)
|
edr89
Desconectado
Mensajes: 105
|
Hola, recien empiezo a trabajar con C y necesito crear un programa que cuente el numero de ceros que hay en una cadena que ingresa el usuario, es decir, el usuario teclea 5,4,3,8,0,1,7,3, al final la aplicacion debe de decir el numero total de ceros es uno, o tres, o cinco, etc. #include <stdio.h> int main() { int smplnum; int sumaceros; sumaceros=0; char respuesta; respuesta=' '; printf("quieres agregar un numero?, escribe s=si, n=no\n"); scanf("%c",&respuesta); while(respuesta=='s'|| respuesta=='S') { printf("Escribe el numero.\n"); scanf("%d",&smplnum); if(smplnum ==0) { sumaceros=sumaceros+1; } else {
printf("quieres agregar un numero?, escribe s= si, n=no"); scanf("%c",&respuesta); } } printf("el numero de ceros es %d.\n",sumaceros); }
Puedo compilar el programa, no me marca ningun error pero al correrlo me pide un numero, si es igual a cero el loop corre y vuelve a preguntar por el nuevo numero pero al teclear un numero distinto de cero la aplicacion pregunta, me da el numero de ceros y ce cierra. El problema esta en : printf("quieres agregar un numero?, escribe s= si, n=no"); scanf("%c",&respuesta); el scanf de la condicion else se lo salta, no me deja teclear mas numero y termina el programa.Por favor si alguien tiene idea de que sucede agradeceré sus comentarios. Saludos!
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
Ya funciona, se trataba de limpiar el buffer bien dejando un espacio en blanco antes del %c del mismo scanf, que es la opción que te dejo:#include <stdio.h> int main(){ int smplnum; int sumaceros=0; char respuesta=' '; printf("quieres agregar un numero?, escribe s=si, n=no\n"); scanf("%c",&respuesta); while(respuesta=='s'|| respuesta=='S') { printf("Escribe el numero.\n"); scanf("%d",&smplnum); if(smplnum ==0) sumaceros++; else { printf("quieres agregar un numero?, escribe s= si, n=no"); scanf(" %c",&respuesta); } } printf("el numero de ceros es %d.\n",sumaceros); return 0; }
Saluditos!. ....
|
|
« Última modificación: 4 Mayo 2013, 18:54 pm por leosansan »
|
En línea
|
|
|
|
edr89
Desconectado
Mensajes: 105
|
Ya funciona, se trataba de limpiar el buffer bien dejando un espacio en blanco antes del %c del mismo scanf, que es la opción que te dejo:
Muchas gracias, funciona!! En general, cada que se usa scanf, ¿debo dejar un espacio? se me hizo raro que el primer scanf, la pregunta inicial, no tiene ese espacio y corre bien, deberia dejarle tambien ese espacio en blanco? Gracias!!
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
Bueno tiene una explicación. Al principio estás leyendo caracteres, de modo que el salto de línea se suprime automáticamente.
Después lees un número, y por un error del scanf, se lee solo la cifra y se deja el salto de línea en el buffer.
De modo que cuando llega a la siguiente pregunta, lo primero que encuentra es el salto de linea. De modo que da la lectura por terminada.
|
|
|
En línea
|
|
|
|
edr89
Desconectado
Mensajes: 105
|
ok, mas o menos entiendo y de hecho me acabo de dar cuenta que cuando el numero es cero en automatico pide el siguiente numero y nunca termina el ciclo hasta que tecleo uno distinto de cero es cuando pregunta de nuevo y por fin puedo salir, es decir, cuando el usuario teclea 0 tiene que preguntar de nuevo, quieres agregar otro numero?, cosa que no hace. ¿Tengo que poner otro if despues de la validacion de cero para que el programa pregunte de nuevo si quieres agregar un numero? Estoy intentando agregar simplemente printf y scanf pero me da error al compilar: 'else' without a previous 'if'
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
Fácil, partiendo del código que ha puesto Leon. Quitale el else.
|
|
|
En línea
|
|
|
|
mavicadi
Desconectado
Mensajes: 20
|
Pero de la manera que lo ha hecho, simplemente comparará si el número que ha introducido es un 0 y no si contiene ceros no ?!
Bueno nada, creo que ya lo he entendido. Fallo mio.
Los mensajes no se pueden borrar ?!
Un saludo!
|
|
« Última modificación: 5 Mayo 2013, 01:49 am por mavicadi »
|
En línea
|
|
|
|
edr89
Desconectado
Mensajes: 105
|
Fácil, partiendo del código que ha puesto Leon. Quitale el else.
ok, segun entendi: #include <stdio.h> int main(){ int smplnum; int sumaceros=0; char respuesta=' '; printf("Ingresar numero?, s=si, n=no\n"); scanf("%c",&respuesta); while(respuesta=='s'|| respuesta=='S') { printf("Escribe el numero.\n"); scanf("%d",&smplnum); if(smplnum ==0) sumaceros=sumaceros+1; printf("quieres agregar otro numero?, escribe s= si, n=no\n"); scanf(" %c",&respuesta); if(respuesta=='s') printf("Escribe el numero.\n"); scanf("%d",&smplnum); if(smplnum ==0) sumaceros=sumaceros+1; printf("quieres agregar otro numero?, escribe s= si, n=no\n"); scanf(" %c",&respuesta); } printf("el numero de ceros es %d.\n",sumaceros); return 0; }
cualquiera sea el numero pregunta si quieres añadir otro, en realidad no importa si es entero, natural. La cosa es que cuente todos los ceros de la cadena de datos.
|
|
|
En línea
|
|
|
|
mavicadi
Desconectado
Mensajes: 20
|
Ya he entendido el funcionamiento del programa, antes me había confundido. Bueno, a simple vista creo que los dos últimos if te sobran, ya que seguirás dentro del while hasta que la respuesta sea NO, entonces con preguntar al final te vale. De todos modos he probado el código y cuando deseas salir, la primera vez que le das a NO, el programa sigue esperando. Yo lo haría de la manera que ha puesto leonsansan pero sin el "else" tal y como ha comentado amchacon. Quedaría así : #include <stdio.h> int main(){ int smplnum; int sumaceros=0; char respuesta=' '; printf("Ingresar numero?, s=si, n=no\n"); scanf("%c",&respuesta); while(respuesta=='s'|| respuesta=='S') { printf("Escribe el numero.\n"); scanf("%d",&smplnum); if(smplnum ==0) sumaceros=sumaceros+1; printf("quieres agregar otro numero?, escribe s= si, n=no\n"); scanf(" %c",&respuesta); }
printf("el numero de ceros es %d.\n",sumaceros); return 0; }
|
|
|
En línea
|
|
|
|
edr89
Desconectado
Mensajes: 105
|
ya quedo, gracias.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
codigo e instrucciones para desbloquear Panthech ADR8995
Dispositivos Móviles (PDA's, Smartphones, Tablets)
|
yesii23
|
0
|
1,654
|
4 Diciembre 2013, 02:57 am
por yesii23
|
|
|
¿El meteorito que trajo las instrucciones para la vida en la Tierra?
Foro Libre
|
El_Andaluz
|
5
|
2,064
|
1 Junio 2015, 04:41 am
por jpmarti91
|
|
|
La CIA usó instrucciones de Reddit para hackear Windows
Noticias
|
wolfbcn
|
2
|
1,327
|
10 Marzo 2017, 17:07 pm
por Serapis
|
|
|
Programa para dar instrucciones previas al teclado
Seguridad
|
Venge91
|
2
|
2,423
|
19 Junio 2017, 22:26 pm
por Minusfour_cierralo_o_baneamefull
|
|
|
Instrucciones para Excepciones
.NET (C#, VB.NET, ASP)
|
DSREY
|
2
|
4,342
|
15 Agosto 2017, 01:12 am
por DSREY
|
|