Can’t seem to figure out where it went wrong
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_CONTAS 5
typedef enum { ATIVO, PASSIVO, PAT_LIQ } Categoria;
typedef struct {
char nome[50];
float valor;
Categoria categoria;
} Conta;
void cadastrar_contas(Conta *contas, int *n_contas);
void cadastrar_contas(Conta *contas, int *n_contas);
void classifica_contas(char** balanco, int tamanho);
void imprimi_balanco(char* nome_arquivo, char* conta_desejada);
void salvar_contas(Conta *contas, int n_contas);
void carregar_contas(Conta *contas, int *n_contas);
void salvar_balanco(char* nome_arquivo, char** balanco, int tamanho);
//void classificar_contas(Conta *contas, int n_contas);
//void imprimir_balanco(Conta *contas, int n_contas);
int main() {
Conta contas[MAX_CONTAS];
int n_contas = 0;
char opcao;
carregar_contas(contas, &n_contas);
do {
printf("Digite a opcao desejada:\n");
printf("1 - Cadastrar contas\n");
printf("2 - Classificar contas\n");
printf("3 - Imprimir balanco\n");
printf("0 - Sair\n");
scanf(" %c", &opcao);
switch (opcao) {
case '1':
cadastrar_contas(contas, &n_contas);
salvar_contas(contas, n_contas);
break;
case '2':
classifica_contas(contas, n_contas);
salvar_contas(contas, n_contas);
break;
case '3':
imprimi_balanco("conta.txt", contas);
break;
case '0':
printf("Encerrando programa.\n");
break;
default:
printf("Opcao invalida! Tente novamente.\n");
}
} while (opcao != '0');
return 0;
}
void cadastrar_contas(Conta *contas, int *n_contas) {
char opcao;
do {
printf("Digite o nome da conta: ");
scanf("%s", contas[*n_contas].nome);
printf("Digite o valor da conta: ");
scanf("%f", &contas[*n_contas].valor);
printf("Digite a categoria da conta: A - Ativo\t, P - Passivo\tL - Patrimonio Liquido\n ");
scanf(" %c", &opcao);
switch (opcao) {
case 'A':
case 'a':
contas[*n_contas].categoria = ATIVO;
break;
case 'P':
case 'p':
contas[*n_contas].categoria = PASSIVO;
break;
case 'L':
case 'l':
contas[*n_contas].categoria = PAT_LIQ;
break;
default:
printf("Opcao invalida! A conta sera classificada como 'Outros'.\n");
contas[*n_contas].categoria = PAT_LIQ + 1; // Outros
}
(*n_contas)++;
printf("Deseja cadastrar outra conta? (S/N) ");
scanf(" %c", &opcao);
} while (opcao == 'S' || opcao == 's');
}
void classifica_contas(char** balanco, int tamanho) {
printf("Classificação das contas do balanço patrimonial:\n");
for (int i = 0; i < tamanho; i++) {
if (strncmp(balanco[i], "Ativo", 5) == 0) {
printf("%s: Ativo\n", balanco[i]);
} else if (strncmp(balanco[i], "Passivo", 7) == 0) {
printf("%s: Passivo\n", balanco[i]);
} else if (strncmp(balanco[i], "Receita", 7) == 0) {
printf("%s: Receita\n", balanco[i]);
} else if (strncmp(balanco[i], "Despesa", 7) == 0) {
printf("%s: Despesa\n", balanco[i]);
} else {
printf("%s: Não classificado\n", balanco[i]);
}
}
}
void imprimi_balanco(char* nome_arquivo, char* conta_desejada) {
FILE* arquivo = fopen(nome_arquivo, "r");
if (arquivo == NULL) {
printf("Erro ao abrir o arquivo.\n");
return;
}
char linha[100];
int encontrou_conta = 0;
while (fgets(linha, 100, arquivo)) {
if (strstr(linha, conta_desejada) != NULL) {
encontrou_conta = 1;
printf("%s", linha);
while (fgets(linha, 100, arquivo)) {
if (linha[0] == '\n') {
break;
}
printf("%s", linha);
}
break;
}
}
if (!encontrou_conta) {
printf("A conta desejada não foi encontrada.\n");
}
fclose(arquivo);
}
void salvar_balanco(char* nome_arquivo, char** balanco, int tamanho) {
FILE* arquivo = fopen("contas.txt", "w");
if (arquivo == NULL) {
printf("Erro ao abrir arquivo!\n");
return;
}
for (int i = 0; i < tamanho; i++) {
fprintf(arquivo, "%s\n", balanco[i]);
}
fclose(arquivo);
printf("Balanço patrimonial salvo no arquivo %s!\n", nome_arquivo);
}
/*void salvar_contas(Conta *contas, int n_contas) {
FILE *arquivo;
int i;
arquivo = fopen("contas.dat", "wb");*/