Ir ao conteúdo
  • Cadastre-se
andersoney

Problema com salvar e ler arquivo(write e reand)

Recommended Posts

Estou com um problema quando salvo um arquivo, e depois tento retomar os dados presentes nele, quando o programa está rodando, ele funciona legal, porém quando eu fecho e abro novamente ele não consegue ler os dados, aparece apenas um monde de codigo que acredito ser binario.

 

segue o codigo do arquivo main tanto quanto a class.

 

Main.cpp

 

 

#include "alunoDados.h"

 
 
#include <fstream>
#include <cstdlib>
#include <stdio.h>
#include <string.h>
#include <iostream>
 
 
 
using namespace std;
 
int main()
{
    alunoDados arquivo;
    arquivo.menu();
    return 0;
}
 

 

 

alunoDados.h

 

 

#ifndef ALUNODADOS_H

#define ALUNODADOS_H
 
#include <fstream>
#include <cstdlib>
#include <stdio.h>
#include <string.h>
#include <iostream>
 
using namespace std;
class alunoDados
{
    int codigo=1;
    char nome[50];
    float n1, n2, n3, n4, mf;
    public:
        alunoDados()
        {
           /* fstream dados;
            dados.open("Dados_Aluno.txt",ios::app|ios::binary);
            if(!dados)
                {
                    cerr<<"Erro ao abrir o programa"<<endl;
                    exit(1);
                }else{
                }
            dados.close();*/
        }
        virtual ~alunoDados() {}
        void salvar()
        {
            ofstream fsalvar;
            fsalvar.open("Dados_Aluno.txt",ios::binary|ios::ate);
            if(!fsalvar)
                {
                    cerr<<"Erro"<<endl;
                    exit(1);
                }
                alunoDados cpp;
            int a;
            do{
            cout<<"Digite o nome do aluno:"<<endl;
            cin>>nome;
            cout<<"Digite a nota da Primeira prova:"<<endl;
            cin>>n1;
            cout<<"Digite a nota da Segunda prova:"<<endl;
            cin>>n2;
            cout<<"Digite a nota da Terceira prova:"<<endl;
            cin>>n3;
            cout<<"Digite a nota da Quarta prova:"<<endl;
            cin>>n4;
            codigo++;
            cout<<"Deseja cadastrar mais alunos?"<<endl<<"1 - Sim"<<endl<<"0 - Nao"<<endl;
            cin>>a;
            fsalvar.write((char*)&cpp,sizeof(alunoDados));
            }while(a!=0);
            fsalvar.close();
        }
        void menu()
        {
            int opcMenu;
            cout<<"Escolha entre as opções:"<<endl;
            cout<<"1 - Salvar novos alunos."<<endl<<"2 - Verificar registros"<<endl<<"0 - Sair."<<endl;
            cin>>opcMenu;
            switch(opcMenu)
            {
                case 1:
                    salvar();
                    menu();
                    break;
                case 2:
                    ler();
                    menu();
                    break;
                default:
                    exit(0);
                    break;
            }
 
        }
        void ler()
        {
            alunoDados cpp;
            ifstream ler_arquivo;
            ler_arquivo.open("Dados_Aluno.txt",ios::binary|ios::in);
            ler_arquivo.seekg(0);
            if(!ler_arquivo)
                {
                    cerr<<"Erro ao ler arquivo"<<endl;
                    exit(1);
                }
            while(ler_arquivo)
                {
                    ler_arquivo.read((char*)&cpp,sizeof(alunoDados));
                    mostrar_na_tela();
                }
                ler_arquivo.close();
        }
        void mostrar_na_tela()
        {
            cout<<"Nome do aluno:"<<endl<<nome<<endl;
            cout<<"Nota da primeira unidade:"<<endl<<n1<<endl;
            cout<<"Nota da segunda unidade:"<<endl<<n2<<endl;
            cout<<"Nota da terceira unidade:"<<endl<<n3<<endl;
            cout<<"Nota da quarta unidade:"<<endl<<n4<<endl;
 
        }
    protected:
    private:
 
};
 
#endif // ALUNODADOS_H
 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

é porque voce nao ta nem lendo do,nem gravando nos membros da estrutura

por exemplo,no caso seria

cout<<"Digite o nome do aluno:"<<endl;

cin>>cpp.nome;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×