Anuncios Google

¿Cómo calculo quién es el más viejo en c?

#include <stdio.h>
 
int main ()
 
{
 
int nombre1, dia1, mes1, ano1, dias1, nombre2, dia2, mes2, ano2, dias2;
 
printf ("Escriba el nombre de la primera persona:");
scanf ("%i\n", &nombre1);
getchar();
printf ("Escriba el dia en que cumple la primera persona:");
scanf ("%i\n", &dia1);
getchar();
printf ("Escriba el mes en que cumple la primera persona:");
scanf ("%i\n", &mes1);
getchar();
printf ("Escriba el ano en que cumple la primera persona:");
scanf ("%i\n", &ano1);
getchar();
 
printf ("Escriba el nombre de la segunda persona:");
scanf ("%i\n", &nombre2);
getchar();
printf ("Escriba el dia en que cumple la segunda persona:");
scanf ("%i\n", &dia2);
getchar();
printf ("Escriba el mes en que cumple la segunda persona:");
scanf ("%i\n", &mes2);
getchar();
printf ("Escriba el ano en que cumple la segunda persona:");
scanf ("%i\n", &ano2);
getchar();
 
dias1 = dia1+mes1*30+(2010-ano1)*365;
dias2 = dia2+mes2*30+(2010-ano2)*365;
 
	if (dias1>dias2)
 
   {
 
   printf ("%i es la persona de mayor edad", nombre1);
 
   }
 
   else if (dias1<dias2)
 
   {
 
   printf ("%i es la persona de mayor edad", nombre2);
 
   }
 
   else if (dias1==dias2)
 
   {
 
   printf ("Las 2 personas tienen la misma edad");
 
   }
 
   getchar();
   return 0;
 
}

Cuando pongo un nombre de más de 1 letra sale todo pegado, y se acaba antes de que le diga que termine. Además me admite un número, luego le doy enter y tengo que escribir otro número para que continúe.


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Almamu

dias1=(ano*365)+(mes*30)+dias

dias1=(ano*365)+(mes*30)+dias;//Esto si el mes introducido es el mes actual
dias1=(ano*365)+((mes-1)*30)+dias;//Esto si el mes introducido es el mes anterior

Luego solo falta comprobar el estado de las variables y ver cuala es mayor. Ten en cuenta que si te pasas de los valores máximos lo cagas todo...

Quita todos esos getchar(); que hay despues de los scanf, puesto que el scanf espera a que pulses Intro...

Puedes usar esto para comprobar los dias:

if(dias1<dias2){//Si la segunda es mayor que la primera
	printf("\nEs mayor la segunda persona");
}else if(dias1==dias2){//Si tienen la misma edad
	printf("\nLos dos tienen los mismos años");
}else{//Si la primera es mayor que la segunda
	printf("\nEs mayor la primera persona");
}

Dentro de los scanf quita el \n puesto que el solo hace el salto de línea.

Según el tipo de variable dentro de los scanf deberás poner %i, %d, o %s, para los chars usa %s.

Aparte un nombre no es un numero, si no una cadena de texto, por lo que cambia el int de nombre1 y nombre2 por char.

Aqui te dejo todo tu código correjido:

#include <stdio.h>
#include <conio.h>
 
int main ()
 
{
	int dia1, mes1, ano1, dias1, dia2, mes2, ano2, dias2;
	char nombre1[256], nombre2[256];
	printf ("Escriba el nombre de la primera persona:");
	scanf ("%s", &nombre1);
	printf ("Escriba el dia en que cumple la primera persona:");
	scanf ("%i", &dia1);
	printf ("Escriba el mes en que cumple la primera persona:");
	scanf ("%i", &mes1);
	printf ("Escriba el ano en que cumple la primera persona:");
	scanf ("%i", &ano1);
	printf ("Escriba el nombre de la segunda persona:");
	scanf ("%s", &nombre2);
	printf ("Escriba el dia en que cumple la segunda persona:");
	scanf ("%i", &dia2);
	printf ("Escriba el mes en que cumple la segunda persona:");
	scanf ("%i", &mes2);
	printf ("Escriba el ano en que cumple la segunda persona:");
	scanf ("%i", &ano2);
 
	dias1=(ano1*365)+(mes1*30)+dia1;
	dias2=(ano2*365)+(mes2*30)+dia2;
	if(dias1<dias2){//Si la segunda es mayor que la primera
		printf("\nEs mayor la primera persona");
	}else if(dias1==dias2){//Si tienen la misma edad
		printf("\nLos dos tienen la misma edad");
	}else{//Si la primera es mayor que la segunda
		printf("\nEs menor la segunda persona");
	}
	getche();
	return 0;
}

No uses getchar para parar el programa al final del todo, puesto que este no funciona muy bien despues de que escanee con el scanf porque a la mayoria de gente no le da tiempo a levantar el dedo. Usa mejor getche();


Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.