Ir ao conteúdo

C Estrutura de Dados em C


Ir à solução Resolvido por Lucca Rodrigues,

Posts recomendados

Postado

Boa tarde galera, necessito fazer o seguinte problema:

 

Faça um programa para leitura, via teclado, dos dados de dois alunos diferentes. Os dados a serem guardados na estrutura aluno são os seguintes: nome, curso, idade. Ao final, imprima estas informações na tela. Crie procedimentos para as operações de leitura e impressão.

 

Eu já escrevi o código e tudo está funcionando, menos a idade. Eu não sei o porquê, mas o meu programa não está lendo a idade do usuário corretamente. deixarei o código aqui e um print mostrando ele rodando. 

 

#include <stdio.h>
#include <stdlib.h>

typedef struct dados_alunos
{
  	char nome[40];
  	char curso [20];
	int idade [2];
} aluno;

void lerVetorAlunos(aluno a[], int n)
{
 int i;
 for( i = 0; i < n; i++)
 {
  printf("\nInforme o nome do aluno: ");
  gets(a[i].nome);
  printf("Informe o curso do aluno: ");
  gets(a[i].curso);
  printf("Informe a idade do aluno:  ");
  gets(a[i].idade);

 }
}

void imprimeVetorAlunos(aluno a[], int n)
{
  int i;
  
  for(i = 0; i < n; i++)
  {
  	printf("\nAluno:");
    printf(" %s", a[i].nome);
    
    printf("\nCurso:");
	printf(" %s", a[i].curso);
	
	printf("\nIdade:");
    printf(" %d", a[i].idade);
    
    printf("\n");
  }
}

int main()
{
  aluno alunos[2];
  lerVetorAlunos(alunos, 2);
  imprimeVetorAlunos(alunos, 2);

  return 0;
}

 

 

 

cats.jpg

  • Solução
Postado

@MQTTH Basta ler a documentação:
scanf()

fgets()

fgets() tem as vezes o inconveniente fato de ler o '\n' inserido ao se teclar Enter, então não podemos deixar isso passar, a menos que você queira esse caractere na sua string.
 

char str[101];

fgets(str, sizeof(str), stdin);
if(str[0] != 0){
    if (str[strlen(str)-1] == '\n'){
        // Caso haja um '\n' logo antes do '\0'
        str[strlen(str)-1] = 0;
    }
}

 

scanf() também tem as vezes um inconveniente, esta pode nem sempre consumir todos os dados inseridos via teclado, e para isso usamos um especificador da seguinte forma: %*c. Este lê e ignora um caractere, provavelmente o '\n' teclado.

 

int x;
scanf("%d%*c", &x);

 

Isso não impede o usuário de teclar mais do que ele deveria. Em geral, scanf() não foi escrita pra isso, mas em programas assim, é esperado que você a use.

  • Amei 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!