elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda para instrucciones if-else y while()
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda para instrucciones if-else y while()  (Leído 3,971 veces)
edr89

Desconectado Desconectado

Mensajes: 105


Ver Perfil
Ayuda para instrucciones if-else y while()
« en: 4 Mayo 2013, 17:49 pm »

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.
Código:
#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 :
Código:
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 Desconectado

Mensajes: 1.314


Ver Perfil
Re: Ayuda para instrucciones if-else y while()
« Respuesta #1 en: 4 Mayo 2013, 18:04 pm »

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:

Código
  1. #include <stdio.h>
  2. int main(){
  3.    int smplnum;
  4.    int sumaceros=0;
  5.    char respuesta=' ';
  6.    printf("quieres agregar un numero?, escribe s=si, n=no\n");
  7.    scanf("%c",&respuesta);
  8.    while(respuesta=='s'|| respuesta=='S') {
  9.        printf("Escribe el numero.\n");
  10.        scanf("%d",&smplnum);
  11.        if(smplnum ==0)
  12.            sumaceros++;
  13.        else {
  14.            printf("quieres agregar un numero?, escribe s= si, n=no");
  15.            scanf(" %c",&respuesta);
  16.        }
  17.    }
  18.    printf("el numero de ceros es %d.\n",sumaceros);
  19.    return 0;
  20. }
  21.  

Saluditos!. ....  


« Última modificación: 4 Mayo 2013, 18:54 pm por leosansan » En línea

edr89

Desconectado Desconectado

Mensajes: 105


Ver Perfil
Re: Ayuda para instrucciones if-else y while()
« Respuesta #2 en: 4 Mayo 2013, 22:57 pm »

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 Desconectado

Mensajes: 1.211



Ver Perfil
Re: Ayuda para instrucciones if-else y while()
« Respuesta #3 en: 4 Mayo 2013, 23:06 pm »

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

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
edr89

Desconectado Desconectado

Mensajes: 105


Ver Perfil
Re: Ayuda para instrucciones if-else y while()
« Respuesta #4 en: 4 Mayo 2013, 23:33 pm »

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:

Citar
'else' without a previous 'if'
En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Ayuda para instrucciones if-else y while()
« Respuesta #5 en: 5 Mayo 2013, 00:49 am »

Fácil, partiendo del código que ha puesto Leon. Quitale el else.
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
mavicadi

Desconectado Desconectado

Mensajes: 20



Ver Perfil
Re: Ayuda para instrucciones if-else y while()
« Respuesta #6 en: 5 Mayo 2013, 01:46 am »

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 Desconectado

Mensajes: 105


Ver Perfil
Re: Ayuda para instrucciones if-else y while()
« Respuesta #7 en: 5 Mayo 2013, 01:57 am »

Fácil, partiendo del código que ha puesto Leon. Quitale el else.

ok, segun entendi:
Código:
#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 Desconectado

Mensajes: 20



Ver Perfil
Re: Ayuda para instrucciones if-else y while()
« Respuesta #8 en: 5 Mayo 2013, 02:55 am »

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í :

Código:
#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 Desconectado

Mensajes: 105


Ver Perfil
Re: Ayuda para instrucciones if-else y while()
« Respuesta #9 en: 5 Mayo 2013, 03:10 am »

ya quedo, gracias.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines