Minha maior dificuldade está nas operações com arquivos.
O trabalho é bem grandinho, mas , vou passar só uma parte do código que estou tentando fazer (indo por partes). Essa primeira parte está trabalhando com arq em txt. O resto será em .bin.
Essa primeira parte trata do cadastro, listagem e remoção de categorias.
Consegui fazer com que o programa cadastre e liste as categorias, todavia, ainda não tenho ideia de como fazer a remoção.
E o professor resolveu estabelecer determinadas regras para o desenvolvimento do código:
Segue abaixo:
1 - Todas as funções devem estar implementadas.
2 - Os arquivos devem ser abertos e fechados somente nas funções que os utilizarem (na main() não!)
4 - Nenhuma das funções abaixo deve ter scanf(), exceto as de leitura de structs.
8 - Não alterar os structs (nome e campos) nem as funções (nome, parâmetros e tipo).
9 - Está permitido o acréscimo de funções.
P.S.: Ainda não adicionei nenhuma função. As que estão no códigos foram todas que o professor passou. Só criei Bloco de código delas
10 - Não utilizar variáveis globais além das que jã estão presentes.
Enfim, preciso de ajuda com a remoção e dicas de como posso melhorar este codigo. Aqui no meu pc ele compilou e fez tudo direitinho, mas, eu aprendi que nem tudo que compila está certo. Agradeço ao(s) ajudante(s) (Jesus ama vcs!!!).
Segue o código que eu escrevi:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
typedef struct _Categoria{
char nome_cat[20];
int num_cat;
}Categoria;
#define TAM_CATEGORIA 4096/sizeof(Categoria) //170 (TAMANHO EM INTEIROS);
Categoria categorias[TAM_CATEGORIA];
FILE *txtCategoria;
int leCategoria(Categoria *categoria)
{
int i;
for (i = 0; i < TAM_CATEGORIA; i++)
{
printf("\nNumero: "
scanf("%d",&categorias[i].num_cat);
if (categorias[i].num_cat==1010)
{
break;
}
printf("\nNome: "
scanf("%s",categorias[i].nome_cat);
}
}
void cadastraCategoria(Categoria categoria)
{
int i;
printf("\n----------CADASTRO DE CATEGORIA----------"
printf("\nDIGITE 1010 EM Numero PARA SAIR\n"
leCategoria(&categoria);
txtCategoria = fopen("categorias.txt","a+"
for (i=0; i< TAM_CATEGORIA;i++)
{
if (categorias[i].num_cat!= 1010 && categorias[i].num_cat !=0)
{
fprintf(txtCategoria,"%d\t%s\n",categorias[i].num_cat, categorias[i].nome_cat);
}
}
fclose(txtCategoria);
system("clear || cls"
printf("\nCATEGORIAS CADASTRADAS COM SUCESSO\n"
}
void listaCategoria()
{
int num;
char nome[20];
printf("\n----------LISTA DE CATEGORIAS----------\n"
printf("\nNúmero\tNome\n"
txtCategoria = fopen("categorias.txt","r"
if (txtCategoria == NULL)
{
printf("\nERRO AO ABRIR O ARQUIVO\n\7"
exit(0);
}
while(fscanf(txtCategoria,"%d\t%s\n",&num,nome)!=EOF)
{
printf("%d\t%s\n",num,nome);
}
fclose(txtCategoria);
}
void removeCategoria(int num_categoria);//não como proceder aqui.
int main ()
{
setlocale(LC_ALL,"Portuguese"
Categoria var_cat;
cadastraCategoria(var_cat);
listaCategoria();
return 0;