Ir ao conteúdo
  • Cadastre-se
andersoney

Problema com salvar e ler arquivo(write e reand)

Posts recomendados

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
Este tópico está parado há muito tempo. Certifique-se que a sua mensagem tem a ver com o tema sendo discutido. Obrigado.

Junte-se à conversa

Você pode postar agora e cadastrar-se depois. Se você tem uma conta, faça o login para postar.

Visitante
Responder

×   Você colou conteúdo com formatação.   Restore formatting

  Só é possível ter até 75 emoticons.

×   O link foi automaticamente convertido para mostrar o conteúdo.   Clique aqui para mostrá-lo como link comum

×   Seu texto anterior foi restaurado.   Limpar o editor

×   You cannot paste images directly. Upload or insert images from URL.






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

×
×
  • Criar novo...

GRÁTIS: minicurso “Como ganhar dinheiro montando computadores”

Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

Inscreva-se agora!