Aparentemente meu código roda limpo, mas queria saber como faço pra ele realmente salvar o arquivo em binário.
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
struct registro{
string vetNome;
string vetEstilo;
string vetInstrumento;
string vetBanda;
bool vetVerifica;
};
char opcoes(){
char escolha = '0';
bool verifica = false;
while (escolha < '1' or escolha > '7'){
if(!verifica){
cin >> escolha;
verifica = true;
}
}
return escolha;
}
void realocar(registro* &vet, int &qtdMaxima, int qtdAtual){
registro* vetAux = new registro[qtdMaxima];
for(int i = 0; i < qtdAtual; i++){
vetAux[i] = vet[i];
}
qtdMaxima += 2;
delete[] vet;
vet = new registro[qtdMaxima];
for(int i = 0; i < qtdAtual; i++){
vet[i] = vetAux[i];
}
delete[] vetAux;
vetAux = NULL;
cout << "memoria ajustada " << qtdMaxima << endl << endl;
}
void incluir(registro* &vet, int &qtdMaxima, int &qtdAtual){
if (qtdAtual == qtdMaxima){
realocar(vet, qtdMaxima, qtdAtual);
}
cin.ignore();
getline(cin, vet[qtdAtual].vetNome);
getline(cin, vet[qtdAtual].vetEstilo);
getline(cin, vet[qtdAtual].vetInstrumento);
getline(cin, vet[qtdAtual].vetBanda);
vet[qtdAtual].vetVerifica = true;
qtdAtual++;
}
void excluir(registro *vet, int qtdAtual){
string palavra;
bool excluido = false;
cin.ignore();
getline(cin, palavra);
for (int i = 0; i < qtdAtual; i++){
if((palavra == vet[i].vetNome) and vet[i].vetVerifica and !excluido){
vet[i].vetVerifica = false;
excluido = true;
}
}
if(!excluido){
cout << "nao existe" << endl;
}
}
void listar(registro *vet, int qtdAtual){
for (int i = 0; i < qtdAtual; i++){
if(vet[i].vetVerifica){
cout << vet[i].vetNome << endl
<< vet[i].vetEstilo << endl
<< vet[i].vetInstrumento << endl
<< vet[i].vetBanda << endl;
}
if(vet[i].vetVerifica){
cout << endl;
}
}
}
void alterar(registro *vet, int qtdAtual){
string palavra;
bool alterado = false;
cin.ignore();
getline(cin, palavra);
for (int i = 0; i < qtdAtual; i++){
if((palavra == vet[i].vetNome) and vet[i].vetVerifica and !alterado){
getline(cin, vet[i].vetEstilo);
getline(cin, vet[i].vetInstrumento);
getline(cin, vet[i].vetBanda);
alterado = true;
}
}
if(!alterado){
cout << "nao existe" << endl;
}
}
void salvar(registro* &vet, int qtdAtual){
ofstream arquivo("data.dat", ios::binary);
char c[1];
int contArquivados = 0;
if(arquivo){
for(int i = 0; i < qtdAtual; i++){
if(vet[i].vetVerifica){
contArquivados++;
int tam = (vet[i].vetNome).size();
for(int k = 0; k < tam; k++){
c[0] = vet[i].vetNome[k];
arquivo.write(c, 1);
}
arquivo.write(" ", 1);
tam = (vet[i].vetEstilo).size();
for(int k = 0; k < tam; k++){
c[0] = vet[i].vetEstilo[k];
arquivo.write(c, 1);
}
arquivo.write(" ", 1);
tam = (vet[i].vetInstrumento).size();
for(int k = 0; k < tam; k++){
c[0] = vet[i].vetInstrumento[k];
arquivo.write(c, 1);
}
arquivo.write(" ", 1);
tam = (vet[i].vetBanda).size();
for(int k = 0; k < tam; k++){
c[0] = vet[i].vetBanda[k];
arquivo.write(c, 1);
}
arquivo.write(" ", 1);
}
}
}
arquivo.close();
cout << "gravados " << contArquivados << endl;
}
void carregar(registro* &vet, int &qtdMaxima, int &qtdAtual){
qtdMaxima = 2;
delete[] vet;
vet = new registro[qtdMaxima];
ifstream arquivo("data.dat", ios::binary);
char c[1];
int op = 1;
qtdAtual = 0;
if(arquivo){
while(!arquivo.eof()){
arquivo.read(c,1);
if(c[0] == ' '){
op++;
} else {
if(qtdAtual == qtdMaxima){
realocar(vet, qtdMaxima, qtdAtual);
}
switch(op){
case 1:{
vet[qtdAtual].vetNome += c[0];
break;
}
case 2:{
vet[qtdAtual].vetEstilo += c[0];
break;
}
case 3:{
vet[qtdAtual].vetInstrumento += c[0];
break;
}
case 4:{
vet[qtdAtual].vetBanda += c[0];
break;
}
}
}
if(op == 5){
op = 1;
vet[qtdAtual].vetVerifica = true;
qtdAtual++;
}
}
}
arquivo.close();
}
int main(){
int qtdMaxima = 2;
char opcao;
int qtdAtual = 0;
registro* vet = new registro[qtdMaxima];
do{
opcao = opcoes();
cout << endl;
switch(opcao){
case '1':{
incluir(vet, qtdMaxima, qtdAtual);
cout << endl;
break;
}
case '2':{
excluir(vet, qtdAtual);
cout << endl;
break;
}
case '3':{
listar(vet, qtdAtual);
break;
}
case '4':{
alterar(vet, qtdAtual);
cout << endl;
break;
}
case '5':{
salvar(vet, qtdAtual);
cout << endl;
break;
}
case '6':{
carregar(vet, qtdMaxima, qtdAtual);
break;
}
}
} while(opcao != '7');
delete[] vet;
vet = NULL;
return 0;
}
Desde já agradeço!