Family struct problem in c

Asked

Viewed 30 times

-1

Hello I’m having trouble in this question: "Write a program that reads and stores in an array the data of 30 persons. These data are the name of the person, his age, and the full names of the father and mother. Next, the program must identify (and show the indices) people who are related by a great-grandparent and brother-brother. In the case of the brothers, it must be further informed which is the younger of the two." The code is this


#include<string.h>

  #define NUM 3

struct pessoa {
  char nome[20];
  char mae[20];
  char pai[20];
  int idade;
  };

main() {
  struct pessoa vetorPessoas[NUM];
  int i;
  printf("Digite os dados de %d pessoas:\n", NUM);
  for (i = 0; i < NUM; i++) {
    printf("Digite o nome da pessoa %d: ", i);
    fflush(stdin);
    gets(vetorPessoas[i].nome);
    printf("%s\n", vetorPessoas[i].nome);
    printf("Digite o nome da mae da pessoa %d: ", i);
    fflush(stdin);
    gets(vetorPessoas[i].mae);
    printf("%s\n", vetorPessoas[i].mae);
    printf("Digite o nome do pai da pessoa %d: ", i);
    fflush(stdin);
    gets(vetorPessoas[i].pai);
    printf("%s\n", vetorPessoas[i].pai);
    printf("Digite a idade da pessoa %d: ", i);
    fflush(stdin);
    scanf("%d", &vetorPessoas[i].idade);
    printf("%d\n", vetorPessoas[i].idade);
    }
   if(!strcmp(vetorPessoas[i].pai, vetorPessoas[i].nome)){
        printf("%s e pai de %s\n", vetorPessoas[i].pai, vetorPessoas[i].pai);
   }
   if(!strcmp(vetorPessoas[i].pai, vetorPessoas[i].pai)){
        printf("Eles sao irmaos\n");
        if(vetorPessoas[i].idade > vetorPessoas[i].idade){
            printf("%s mais velho\n", vetorPessoas[i].idade);
        }
        else{
            printf("%s e mais novo\n", vetorPessoas[i].idade);
        }
    }
}

The problem is that it shows everything even when I don’t want and I’d like to know how I can fix it.

  • This if: if(!strcmp(vetorPessoas[i].pai, vetorPessoas[i].nome)){ is out of a loop. Note that at this point the variable value i is NUM. In addition to if(!strcmp(vetorPessoas[i].pai, vetorPessoas[i].pai)){ you’re comparing a string to itself, there’s no way it could be different

  • I did what you showed and now it doesn’t show which brother is older

1 answer

0

I think you misunderstood my comment.
Try:
Whereas brothers are those who have the same father and same mother:

printf("\nIrmãos\n");
for (i=0; i<NUM-1; i++) {
    for (j=i+1; j<NUM; j++) {
        if (!strcmp(vetorPessoas[i].pai, vetorPessoas[j].pai) && !strcmp(vetorPessoas[i].mae, vetorPessoas[j].mae)){
            printf("%s é irmão de %s\n", vetorPessoas[i].nome, vetorPessoas[j].nome);
            if (vetorPessoas[i].idade < vetorPessoas[j].idade)
                printf("%s é mais novo\n", vetorPessoas[i].nome);
            else
                if (vetorPessoas[i].idade > vetorPessoas[j].idade)
                    printf("%s é mais novo\n", vetorPessoas[j].nome);
                else
                    printf("São gêmeos\n");
        }
    }
}

Note: Cases of more than two siblings not treated.

printf("\nAvós\n");
for (i=0; i<NUM; i++) {
    for (j=0; j<NUM; j++) {
        if (!strcmp(vetorPessoas[i].pai, vetorPessoas[j].nome)) {
            printf("%s\tAvô paterno: %s\n", vetorPessoas[i].nome, vetorPessoas[j].pai);
            printf("%s\tAvó paterna: %s\n", vetorPessoas[i].nome, vetorPessoas[j].mae);
        }
        if (!strcmp(vetorPessoas[i].mae, vetorPessoas[j].nome)) {
            printf("%s\tAvô materno: %s\n", vetorPessoas[i].nome, vetorPessoas[j].pai);
            printf("%s\tAvó materna: %s\n", vetorPessoas[i].nome, vetorPessoas[j].mae);
        }
    }
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.