Boa noite pessoal,estou com o codigo pronto,mas nas linhas "celula *popular" e no começo do main quando abre o arquivo,eles não estao funcionando direito, era para abrir o cadastro,fazer tudo e salvar num arquivo .txt e sempre que abrir ele usar esse arquivo já mas não esta dando certo,se alguém puder ajudar.
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string>
#include <time.h>
#include <fstream>
using namespace std;
typedef struct no {
int matricula;
string nome;
struct no *prox; //ponteiro para o proximo elemento
} Celula;
Celula *cadastrar(Celula *e);
Celula *inserir(Celula umNo, Celula *e);
void exibir(Celula *e);
int contarNos(Celula *e);
void localizar(int matricula, Celula *e);
Celula *remover(int matricula, Celula *e);
int existeArquivo(char nomeArquivo[]);
Celula *popular(char nomeArquivo[], Celula *e);
int main() {
Celula *entrada = NULL;
srand(time(NULL));
int opcao;
int matricula;
FILE *procurador;
if (existeArquivo("basedados.txt")) {
cout << "Arquivo localizado e sera exibido...\n";
entrada = popular("basedados.txt", entrada);
exibir(entrada);
}
do {
cout << "1 - Inserir\n";
cout << "2 - Exibir\n";
cout << "3 - Localizar por matricula\n";
cout << "4 - Localizar por nome\n";
cout << "5 - Remover por matricula\n";
cout << "6 - Finalizar\n";
cout << "Opcao: ";
cin >> opcao;
switch (opcao) {
case 1:
cout << "Cadastrando aluno\n";
entrada = cadastrar(entrada);
break;
case 2:
cout << "Total de elementos da estrutura: " << contarNos(entrada) << "\n";
exibir(entrada);
cout << "\n\n";
break;
case 3:
if (entrada != NULL) {
cout << "Localizando por matricula\n";
cout << "Digite matricula a ser pesquisada: ";
cin >> matricula;
localizar(matricula, entrada);
} else cout << "Estrutura vazia\n\n";
break;
case 4:
cout << "Localizando por nome\n";
break;
case 5:
if (entrada != NULL) {
cout << "Removendo por matricula\n";
cout << "Digite matricula a ser removida: ";
cin >> matricula;
entrada = remover(matricula, entrada);
} else cout << "Estrutura vazia\n\n";
break;
case 6:
cout << "Obrigado por usar o sistema\n";
break;
default:
cout << "Opcao invalida\n";
break;
}
} while (opcao != 6);
return 1;
}
Celula *remover(int matricula, Celula *e) {
Celula *i, *iR;
if (e == NULL) {
cout << "Estrutura vazia. Matricula não encontrada\n\n";
return e;
}
for (iR = NULL, i = e; i != NULL; iR = i, i = i->prox) {
if (matricula == i->matricula) {
cout << "Matricula localizada no sistema\n";
//ta no inicio
if (i == e) {
//apagar o primeiro e reapontar a estrutura
e = e->prox;
} else if (i->prox == NULL) { //ta no fim
//apagar o ultimo e reapontar a estrutura
iR->prox = NULL;
} else { //ta no meio
//apagar o do meio e reapontar a estrutura
iR->prox = i->prox;
}
free(i);
return e;
}
}
cout << "Matricula não localizada\n\n";
return e;
}
void localizar(int matricula, Celula *e) {
Celula *i;
if (e == NULL) cout << "Estrutura vazia. Matricula não encontrada\n\n";
for (i = e; i != NULL; i = i->prox) {
if (matricula == i->matricula) {
cout << "Matricula localizada no sistema\n";
cout << "Nome: " << i->nome << "\n\n";
return; //acabou a pesquisa
}
}
cout << "Matricula não localizada\n\n";
}
int contarNos(Celula *e) {
Celula *i;
int contador = 0;
if (e == NULL) return contador;
for (i = e; i != NULL; i = i->prox) {
contador++;
}
return contador;
}
void exibir(Celula *e) {
Celula *i;
if (e == NULL) {
return; //sai forcadamente
} else {
cout << "\nRelacao de alunos\nMatricula - Nome\n";
for (i = e; i != NULL; i = i->prox) {
cout << i->matricula << " - " << i->nome << "\n";
}
}
}
Celula *inserir(Celula umNo, Celula *e) {
Celula *novo;
//alocar
novo = (Celula *)malloc(sizeof(Celula));
//depositar
novo->matricula = umNo.matricula;
novo->nome = umNo.nome;
//engatar
novo->prox = e; //e contem o endereco do ultimo elemento
//retornar
return novo;
}
Celula *cadastrar(Celula *e) {
Celula umNo;
srand(time(NULL));
umNo.matricula = (rand() % 1000) + 100;
cout << "Matricula: " << umNo.matricula << "\n";
cout << "Nome: ";
cin >> umNo.nome;
e = inserir(umNo, e);
cout << "\nCadastro realizado com sucesso\n\n";
return e;
}
int existeArquivo(char nomeArquivo[]) {
FILE *procurador = fopen(nomeArquivo,"r");
if (!procurador) return 0; //não existe o arquivo
else {
fclose(procurador);
return 1; //existe o arquivo
}
}
/*Celula *popular(char nomeArquivo[], Celula *e) {
FILE *procurador = fopen(nomeArquivo,"r");
char matricula[100];
char nome[100];
celula umNo;
do {
fscanf(procurador,"%s\t%s",matricula, nome);//
if (feof(procurador)) {
break;
}
e = inserir(unNo, e);
} while (1);
fclose(procurador);
return e;
}*/
Celula *popular(char nomeArquivo[], Celula *e) {
ofstream auxArquivo ("basedados.txt");
if(auxArquivo.is_open()){
auxArquivo << cout << "Matricula: " << umNo.matricula << cout << "Nome: "; << umNo.matricula;
auxArquivo.close();
}else{
cout << "\nArquivo Inválido\n\n";
}
}