Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: daniloops en 29 Abril 2014, 19:52 pm



Título: Ayuda ejercicio principiante
Publicado por: daniloops en 29 Abril 2014, 19:52 pm
Hola soy primerizo en esto y  me piden ingresar la edad y estado civil de 10 personas pero al poner mi codigo solo me lee la edad y no puedo ingresar el estado civil(c=casado s=soltero) que tengo mal??
debo definir otro conrador para la variablee estado? o que :c saludos

#include <stdio.h>
#include <stdlib.h>

main()
{
      int edad,conta=0;
      char estado;
     
      while(conta<5)
      {
      printf("ingrese edad \n");
      scanf("%d",&edad);
     
      printf("ingrese estado civil \n");
      scanf("%c",&estado);
     
      conta=conta+1;
      } // fin while
     
      system("pause");
     
      }


Título: Re: Ayuda ejercicio principiante
Publicado por: El Benjo en 29 Abril 2014, 21:02 pm
Estás mal en la línea:

Código
  1. scanf("%c",&estado);

Hasta donde yo sé eso no se hace. Cambialo por:

Código
  1. estado = getche();


Título: Re: Ayuda ejercicio principiante
Publicado por: Blaster en 29 Abril 2014, 21:13 pm
Para estos casos deberias implementar una estructura donde puedes guardar los datos de las distintas personas una tal como

Código
  1. struct datos{
  2.    char estado_civil[12];
  3.    int edad;
  4.  }persona[10];
  5.  
  6. int main(void)
  7. {
  8.    int i;
  9.  
  10.    for (i = 0; i < cant; i++){
  11.        scanf("%d", &persona[i].edad);
  12.        scanf("%s", persona[i].estado_civil);
  13.    }
  14.  
  15.    return 0;
  16. }

Saludos...


Título: Re: Ayuda ejercicio principiante
Publicado por: Stakewinner00 en 29 Abril 2014, 21:25 pm
Solo quería añadir que usar system no es demasiado recomendado, y que como más o menos ya indico Blaster, si necesitas hacer un bucle con un indice es mejor usar for que while, entonces la cosa quedaría
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. main()
  5. {
  6.      int edad;
  7.      char estado;
  8.  
  9.      for(int conta=0;conta<5;conta++) /* conta++ es equivalente a conta=conta+1 ,puedes usar ++conta, que es similar que no igual a conta++*/
  10.      {
  11.      printf("ingrese edad \n");
  12.      scanf("%d",&edad);
  13.  
  14.      printf("ingrese estado civil \n");
  15.      scanf("%c",&estado);
  16.      } // fin for
  17.  
  18.      system("pause");
  19.  
  20.      }


Título: Re: Ayuda ejercicio principiante
Publicado por: rir3760 en 29 Abril 2014, 23:18 pm
me piden ingresar la edad y estado civil de 10 personas pero al poner mi codigo solo me lee la edad y no puedo ingresar el estado civil(c=casado s=soltero) que tengo mal?
El problema se debe que la función scanf cuando se utiliza con el especificador "%c" (también ocurre con "%[]") no descarta el espacio blanco. Supongamos que al pedir la edad introduces:
Código:
18{ENTER}
Los caracteres '1' y '8' se procesan por scanf para obtener el entero 18 y se almacena en la variable "edad". El avance de linea se queda en el bufer de la entrada estándar.

Cuando pides el estado scanf lee el avance de linea y lo almacena en la variable "estado", para que esto no ocurra debes utilizar:
Código
  1. printf("ingrese edad \n");
  2. scanf("%d",&edad);
  3.  
  4. printf("ingrese estado civil \n");
  5. scanf(" %c" /* <== */,&estado);
Con " %c" el espacio indica que se debe descartar primero el espacio blanco (el '\n' de la linea anterior) y solo entonces tomar el carácter que sera almacenado en "estado".

Si te interesa el tema puedes utilizar el motor de búsqueda para revisar los temas relacionados con el bufer de la entrada estándar, hay por lo menos media docena.

----

Aparte de eso el programa tiene varias deficiencias, las dos mas importantes: 1) te piden obtener la información de diez personas pero tu pides solo cinco y 2) esa información se pierde ya que utilizas las mismas variables (edad y estado) para todas las personas.

Un saludo


Título: Re: Ayuda ejercicio principiante
Publicado por: daniloops en 30 Abril 2014, 01:08 am
uuf gracias por todas las respuestas la verdad es que como estoy recien comenzando no entiendo mucho algunos codigos como el "for" y demases, el profe solo nos ha enseñado la estructura while, los if-else y uso de contadores nada mas, aun que deben ser parecidas, pero encontre bastante info buena en el foro asi q de hoy me pongo a intrusear muchsa gracias