Problem alternating fgets and scanf_s

Asked

Viewed 20 times

0

I have a problem that the user has to enter the name and age of 5 people, and have to print on the screen the name of the younger person.

I made the following code

#include <stdio.h>
#include <string.h>

struct pessoa {
    char nome[1000];
    int idade;

};

int main() {
    pessoa pessoa1;
    pessoa pessoa2;
    pessoa pessoa3;
    pessoa pessoa4;
    pessoa pessoa5;

    printf("\n Insira o nome da primeira pessoa: ");
    fgets(pessoa1.nome, 1000, stdin);

    printf("\n Insira o nome da segunda pessoa: ");
    fgets(pessoa2.nome, 1000, stdin);

    printf("\n Insira o nome da terceira pessoa: ");
    fgets(pessoa3.nome, 1000, stdin);

    printf("\n Insira o nome da quarta pessoa: ");
    fgets(pessoa4.nome, 1000, stdin);

    printf("\n Insira o nome da quinta e ultima pessoa: ");
    fgets(pessoa5.nome, 1000, stdin);

    printf("\n Insira a idade da primeira pessoa: ");
    scanf_s("%d", &pessoa1.idade);

    printf("\n Insiraa idade da segunda pessoa: ");
    scanf_s("%d", &pessoa2.idade);

    printf("\n Insira a idade da terceira pessoa: ");
    scanf_s("%d", &pessoa3.idade);

    printf("\n Insira a idade da quarta pessoa: ");
    scanf_s("%d", &pessoa4.idade);

    printf("\n Insira o nome da quinta e ultima pessoa: ");
    scanf_s("%d", &pessoa5.idade);

    pessoa pessoaMaisNova;
    pessoaMaisNova.idade = 150;


    if (pessoa1.idade < pessoaMaisNova.idade) {
        pessoaMaisNova = pessoa1;
    }

    if (pessoa2.idade < pessoaMaisNova.idade) {
        pessoaMaisNova = pessoa2;
    }

    if (pessoa3.idade < pessoaMaisNova.idade) {
        pessoaMaisNova = pessoa3;
    }

    if (pessoa4.idade < pessoaMaisNova.idade) {
        pessoaMaisNova = pessoa4;
    }

    if (pessoa5.idade < pessoaMaisNova.idade) {
        pessoaMaisNova = pessoa5;
    }

    printf("\n Nome da pessoa mais nova: %s", pessoaMaisNova.nome);
}

So everything is ok, but when I make the next change, alternating fgets and scanf_s (instead of doing all fgets first and then scanf_s):

    printf("\n Insira o nome da primeira pessoa: ");
    fgets(pessoa1.nome, 1000, stdin);
    printf("\n Insira a idade da primeira pessoa: ");
    scanf_s("%d", &pessoa1.idade);

    printf("\n Insira o nome da segunda pessoa: ");
    fgets(pessoa2.nome, 1000, stdin);
    printf("\n Insiraa idade da segunda pessoa: ");
    scanf_s("%d", &pessoa2.idade);

    printf("\n Insira o nome da terceira pessoa: ");
    fgets(pessoa3.nome, 1000, stdin);
    printf("\n Insira a idade da terceira pessoa: ");
    scanf_s("%d", &pessoa3.idade);

    printf("\n Insira o nome da quarta pessoa: ");
    fgets(pessoa4.nome, 1000, stdin);
    printf("\n Insira a idade da quarta pessoa: ");
    scanf_s("%d", &pessoa4.idade);

    printf("\n Insira o nome da quinta e ultima pessoa: ");
    fgets(pessoa5.nome, 1000, stdin);
    printf("\n Insira o nome da quinta e ultima pessoa: ");
    scanf_s("%d", &pessoa5.idade);

When I run the code, I can type the first person’s name, the first person’s age, but it jumps to the second person’s age (I can’t type the name). The same happens to other people. Why it happens?

1 answer

0

I made some modifications

#include <stdio.h>
#include <string.h>

struct pessoa {
  char nome[1000];
  int idade;
};

int main() {
  struct pessoa pessoa1;
  struct pessoa pessoa2;
  struct pessoa pessoa3;
  struct pessoa pessoa4;
  struct pessoa pessoa5;

  printf("\n Insira o nome da primeira pessoa: ");
  fgets(pessoa1.nome, 1000, stdin);

  printf("\n Insira o nome da segunda pessoa: ");
  fgets(pessoa2.nome, 1000, stdin);

  printf("\n Insira o nome da terceira pessoa: ");
  fgets(pessoa3.nome, 1000, stdin);

  printf("\n Insira o nome da quarta pessoa: ");
  fgets(pessoa4.nome, 1000, stdin);

  printf("\n Insira o nome da quinta e ultima pessoa: ");
  fgets(pessoa5.nome, 1000, stdin);

  printf("\n Insira a idade da primeira pessoa: ");
  scanf("%d", &pessoa1.idade);

  printf("\n Insiraa idade da segunda pessoa: ");
  scanf("%d", &pessoa2.idade);

  printf("\n Insira a idade da terceira pessoa: ");
  scanf("%d", &pessoa3.idade);

  printf("\n Insira a idade da quarta pessoa: ");
  scanf("%d", &pessoa4.idade);

  printf("\n Insira o nome da quinta e ultima pessoa: ");
  scanf("%d", &pessoa5.idade);

  struct pessoa pessoaMaisNova;
  pessoaMaisNova.idade = 150;

  if (pessoa1.idade < pessoaMaisNova.idade) {
    pessoaMaisNova = pessoa1;
  }

  if (pessoa2.idade < pessoaMaisNova.idade) {
    pessoaMaisNova = pessoa2;
  }

  if (pessoa3.idade < pessoaMaisNova.idade) {
    pessoaMaisNova = pessoa3;
  }

  if (pessoa4.idade < pessoaMaisNova.idade) {
    pessoaMaisNova = pessoa4;
  }

  if (pessoa5.idade < pessoaMaisNova.idade) {
    pessoaMaisNova = pessoa5;
  }

  printf("\n Nome da pessoa mais nova: %s", pessoaMaisNova.nome);
}

I have entered the following data:

Ella-Mai Jensen
Michael Roche
Tazmin Powell
Ahmet Corrigan
Layton Barlow
51
32
86
85
46

And the following result was produced:

Nome da pessoa mais nova: Michael Roche

Browser other questions tagged

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