-1
Good afternoon.
I’m doing an exercise, I developed a solution but it’s not working, I’m a few days ago trying to solve but.
Write a program that reads the age and first name of 10 people. Your program should end when a negative age is entered. When finished, your program should write the name and age of younger and older people.
#include <stdio.h>
#include <string.h>
#include <conio.h>
int main()
{
int i=0;
int idade[10];
int troca_idade;
char nome[10][20];
char troca_nome[20];
for (i=0;i<10;i++){
printf("Digite o %i nome: ",i);
fgets(nome[i],20,stdin);
setbuf(stdin,NULL);
printf("Digite a idade: ");
scanf("%i",&idade[i]);
setbuf(stdin,NULL);
if (idade[i]<0){
break;
}
}
for(i=0;i<10;i++){
if (idade[i]<idade[i+1]){ // Se a posição atual for menor que a seguinte não faz nada, se for diferente começa.Lembrando que estou espelhando a posição da idade com os nomes.
}
else{
troca_idade=idade[i];//troca_idade esta com maior valor
// troca_nome=nome[0];
strcpy(troca_nome, nome[i]);
idade[i]=idade[i+1];//idade[i] esta com o valor menor
//nome[i]=troca_nome[0];
strcpy(nome[i],nome[i+1]);
idade[i+1]=troca_idade; //A posição a frente (i+1) esta com o maior vetor
//nome[i+1]=troca_nome[0];
strcpy(nome[i+1],troca_nome);
printf("\n%i",i);
i=0; //Se for feita uma alteração zera o contador, para refericação de todo o vetor novamente, só sai do loop quando na mudar nada de lugar.
}
}
for (i=0;i<10;i++){
printf("idade: %i nome: %s ",idade[i],nome[i]);
}
return 0;
}
The logic and the following, if the later position is greater than the current one both change value, each time you change the counter Zera, to revert everything, only leaves the Loop when you no longer make any changes !
I believe the problem is in the i counter of FOR, when I have printed only appears the value 2.
I know it’s a simple and banal problem, but I spent a few days trying to solve it. And the solutions I’ve been trying Are endangering the compiler.
Note that the index of your array varies from 0 to 9. You loop
for(i=0;i<10;i++){
but then the ifif (idade[i]<idade[i+1]){
, ie for i = 9 will try to access age[10] that is outside the limit of its array.– anonimo