Ir ao conteúdo
  • Cadastre-se

C++ Imprimir dados de um aluno


Talyson Maia

Posts recomendados

Olá, boa tarde. Estou tentando fazer um programa em c++ para imprimir os dados de um aluno. Primeiro eu preencho os dados dos alunos e depois vou escolher uma matricula para exibir os dados desse aluno especificamente. Todavia, não está aparecendo nada.

 

#include <iostream>
#include <iomanip>

using namespace std;

struct Aluno {
    int matricula;
    char nome [100];
    double media;
};

void acharAluno() {
    
    Aluno a;
    
    cin >> matricula;
    if(matricula == a.matricula) {
    cout << a.nome << endl;
    cout << a.media;
    }
}

int main () {
    
    int size;
    cin >> size;
    Aluno a[size];

    for(int i = 0 ; i < size ; i++) {
        cin >> a[i].matricula;
        cin.ignore();
        cin.get(a[i].nome, 100);
        cin >> a[i].media;
    }
    acharAluno();
    
    return 0;
}

 

Link para o comentário
Compartilhar em outros sites

1 hora atrás, Talyson Maia disse:
    void acharAluno();

 

Não use algo assim, retornando void e sem argumentos.  É praticamente inútil: vai precisar de valores globais e não ter a mínima flexibilidade...

 

Faça o simples: o que você quer é saber se um aluno com uma certa matricula esta no seu conjunto. Então ESCREVA isso, algo como

 

  int achar_aluno( int matricula, int size, Aluno al[]);

 

E retorne a posição do vetor onde está o aluno com a matrícula procurada, ou -1, por exemplo.

 

 

Escreva em torno dos dados.

 

Em especial em C++ que provavelmente é a linguagem onde é mais fácil de expressar coisas.

 

O que está faltando em seu programa é entender que falta um nível de composição: Seus dados não são Aluno mas sim um conjunto de Aluno. Se tiver isso em seu programa tudo fica muito mais fácil

 

 

Em C algo assim

 

typedef struct
{
    int   size;
    Aluno al[20];

}   Turma;

 

Sobre isso:

 

    int size;
    cin >> size;
    Aluno a[size];

 

Não pode escrever isso no padrão desta linguagem. É preciso ter um valor constante na declaração. Mesmo em C.

Você escreveu um programa em C. Não faça isso.

 

Um exemplo mínimo

 

Esse programa em C++ mostra como construir algumas dessas coisas

 

#include <iomanip>
#include <iostream>
#include <vector>

using namespace std;

struct Aluno
{
    int    matricula;
    char   nome[100];
    double media;

    void lista()
    {
       cout << setw(6) << matricula <<
           setw(20) << nome << 
           " " << media << "\n";
    }
};

struct Turma
{
    int           limite;
    int           size;
    vector<Aluno> aluno;
    Turma() : size(0), limite(8){};  // vazia no inicio

    int achar_aluno(int matricula)
    {
        for (int i = 0; i < size; i += 1)
            if (matricula == aluno[i].matricula) return i;
        return -1;
    }

    int insere(const Aluno al)
    {  // se não cabe mais retorna erro
        if (limite == aluno.size()) return -1;
        aluno.push_back(al);
        size += 1;  // conta esse
        return size;
    }

    void lista()
    {
        cout << "Turma tem " << size << " alunos\n";
        for (auto al : aluno) al.lista();
        cout << "\n";
    }
};

int main(void)
{
    Turma um;

    um.lista();

    um.insere(Aluno{12345, "Jhonny Cash", 7.8});
    um.insere(Aluno{1510, "Clube do Hardware", 5.5});
    um.insere(Aluno{1123, "Outro Aluno", 8.5});

    um.lista();

    cout << "buscando aluno com matricula 1510\n";
    int pos = um.achar_aluno(1510); 
    // pos e a posicao do vetor onde esta o aluno, ou -1
    if (pos < 0)
        cout << "não tem aluno com essa matricula\n";
    else
        um.aluno[pos].lista();

    return 0;
}


Rode e compare

 

Ele mostra

 

Turma tem 0 alunos

Turma tem 3 alunos
 12345         Jhonny Cash 7.8
  1510   Clube do Hardware 5.5
  1123         Outro Aluno 8.5

buscando aluno com matricula 1510
  1510   Clube do Hardware 5.5

 

Em C++ as funções podem e devem fazer parte da estrutura. É muito mais simples assim.

 

 

 

Link para o comentário
Compartilhar em outros sites

@arfneto Ajeitei um pouco o meu código e ele passou em alguns testes, no entanto ficou em um.
O meu código: 

#include <iostream>
#include <iomanip>

using namespace std;

struct Aluno {
    int matricula;
    char nome [100];
    double media;
};

int acharAluno(Aluno *a, int size, int matric) {
    
    for(int i = 0 ; i < size ; i++) {
    if(a[i].matricula == matric) {
    cout << a[i].nome << endl;
    cout << fixed << setprecision(1) << a[i].media;
    break;
    }
    if(a[i].matricula == matric) {
        cout << "não ENCONTRADA";
    }
    }
}

int main () {
    
    int size;
    cin >> size;
    Aluno a[size];

    for(int i = 0 ; i < size ; i++) {
        cin >> a[i].matricula;
        cin.ignore();
        cin.get(a[i].nome, 100);
        cin >> a[i].media;
    }
    int matric;
    cin >> matric;
    acharAluno(a, size, matric);
    
    
    return 0;
}

Teste que ele ficou:
(não aparece nenhuma resposta).

 

--- Input ---

4↵ 5↵ Joao·da·Silva↵ 2.5↵ 3↵ Maria·dos·Santos↵ 8.2↵ 8↵ Jose·de·Souza↵ 7↵ 2↵ Ana·Lima↵ 3.3↵ 1↵


--- Program output ---

--- Expected output (exact text)---

não·ENCONTRADA

3 minutos atrás, Talyson Maia disse:

@arfneto Ajeitei um pouco o meu código e ele passou em alguns testes, no entanto ficou em um.
O meu código: 

#include <iostream>
#include <iomanip>

using namespace std;

struct Aluno {
    int matricula;
    char nome [100];
    double media;
};

int acharAluno(Aluno *a, int size, int matric) {
    
    for(int i = 0 ; i < size ; i++) {
    if(a[i].matricula == matric) {
    cout << a[i].nome << endl;
    cout << fixed << setprecision(1) << a[i].media;
    break;
    }
    if(a[i].matricula == matric) {
        cout << "não ENCONTRADA";
    }
    }
}

int main () {
    
    int size;
    cin >> size;
    Aluno a[size];

    for(int i = 0 ; i < size ; i++) {
        cin >> a[i].matricula;
        cin.ignore();
        cin.get(a[i].nome, 100);
        cin >> a[i].media;
    }
    int matric;
    cin >> matric;
    acharAluno(a, size, matric);
    
    
    return 0;
}

Teste que ele ficou:
(não aparece nenhuma resposta).

 

--- Input ---

4↵ 5↵ Joao·da·Silva↵ 2.5↵ 3↵ Maria·dos·Santos↵ 8.2↵ 8↵ Jose·de·Souza↵ 7↵ 2↵ Ana·Lima↵ 3.3↵ 1↵


--- Program output ---

--- Expected output (exact text)---

não·ENCONTRADA

corrigindo: o segundo if é:
if(a[i].matricula != matric) 

Link para o comentário
Compartilhar em outros sites

Você entendeu o que eu te expliquei? 

Rodou o programa que eu te mostrei?

Entendeu o programa?

 

Está programando em C. É mais difícil a toa. Compare os dois.

 

E escreva em torno dos dados.

 

Seu programa trata de um grupo de alunos. Deve ter isso no programa. Em qualquer linguagem.

 

 E seu programa não tem isso. Isso quer dizer que vai ter mais trabalho. A toa.

 

E, repito. está programando em C++. USE a linguagem que está aprendendo. E eu te mostrei um exemplo completo. 

Link para o comentário
Compartilhar em outros sites

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...