Ayuda ejercicio principiante

Iniciado por daniloops, 29 Abril 2014, 19:52 PM

0 Miembros y 1 Visitante están viendo este tema.

daniloops

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");
     
      }

El Benjo

Estás mal en la línea:

scanf("%c",&estado);

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

estado = getche();
www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.

Blaster

#2
Para estos casos deberias implementar una estructura donde puedes guardar los datos de las distintas personas una tal como

struct datos{
   char estado_civil[12];
   int edad;
 }persona[10];

int main(void)
{
   int i;

   for (i = 0; i < cant; i++){
       scanf("%d", &persona[i].edad);
       scanf("%s", persona[i].estado_civil);
   }

   return 0;
}


Saludos...

Stakewinner00

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 #include <stdio.h>
#include <stdlib.h>

main()
{
      int edad;
      char estado;
     
      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++*/
      {
      printf("ingrese edad \n");
      scanf("%d",&edad);
     
      printf("ingrese estado civil \n");
      scanf("%c",&estado);
      } // fin for
     
      system("pause");
     
      }

rir3760

Cita de: daniloops en 29 Abril 2014, 19:52 PMme 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:
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:
printf("ingrese edad \n");
scanf("%d",&edad);

printf("ingrese estado civil \n");
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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

daniloops

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