I'm doing a project in C, which requires creating and reading a file. I'm having trouble implementing the reading. In reading I have already tried to apply fgets()
, fscanf()
and fread()
. But none worked. Does anyone suggest anything to me?
Thank you in advance.
Follow the code:
main()
{
//Declaração de variáveis
Cliente *primeiro = NULL;
int opcao;
//Artificio para repetir o programa
while (opcao != 5)
{
//Menu de opcoes
printf("MENU\n");
printf("<1> Novo cadastro de cliente \n");
printf("<2> Listar clientes\n");
printf("<3> Excluir cadastro de cliente\n");
printf("<4> Alterar cadastrado de cliente\n");
printf("<5> Sair");
//lendo a opcao do menu
fflush(stdin);
printf("\nDigite a opcao desejada:");
scanf("%d",&opcao);
switch(opcao)
{
case 1:
//Inserindo os clientes
fflush(stdin);
system("cls");
printf("NOVO CADASTRO DE CLIENTE\n");
primeiro = inserir_cliente(primeiro);
getch();
system("cls");
break;
case 2:
//Listando os clientes
system("cls");
printf("CLIENTES CADASTRADOS\n");
listar_cliente(primeiro);
getch();
system("cls");
break;
case 3:
//excluir cliente
system("cls");
printf("EXCLUIR CLIENTES");
primeiro = excluir_cliente(primeiro);
getch();
system("cls");
break;
case 4:
//açterar informaçoes do cliente
system("cls");
printf("ALTERAR INFORMACOES DO CLIENTE");
alterar_cliente(primeiro);
getch();
system("cls");
break;
case 5:
//artificio para sair do programa.
opcao = 5;
break;
default:
system("cls");
break;
}
}
}
Cliente* inserir_cliente(Cliente *primeiro)
{
FILE *cli;
cli = fopen("cadastrocliente.txt","a+");
if(cli == NULL)
{
printf("Arquivo NAO pode ser aberto");
system("pause");
return 0;
}
Cliente novocliente;
Cliente *atual = primeiro;
char identificador = 'F';
//Lendo as informaçoes do cliente.
printf("\nNome:");
fflush(stdin);
fgets(novocliente.nome,40,stdin);
printf("\n");
printf("CPF:",135);
fflush(stdin);
fgets(novocliente.cpf,15,stdin);
printf("\n");
printf("Codigo:",162);
scanf("%u",&novocliente.codigo);
printf("\n");
//Verificando se o cadastro já existe.
for(atual=primeiro; atual!=NULL; atual=atual->prox)
{
if(atual->codigo==novocliente.codigo)
{
identificador= 'V';
break;
}
}
if(identificador!='V' && (strlen(novocliente.nome)!=1 && strlen(novocliente.cpf)!=1))
{
//Alocando os espaços e guardando as informaçoes do cliente.
Cliente* ClienteNovo=(Cliente*) malloc(sizeof(Cliente));
strcpy(ClienteNovo->nome,novocliente.nome);
strcpy(ClienteNovo->cpf,novocliente.cpf);
ClienteNovo->codigo=novocliente.codigo;
ClienteNovo->prox=primeiro;
printf("Cadastro realizado com sucesso.");
fprintf(cli,"%u\n",novocliente.codigo);
fprintf(cli,"%s",novocliente.nome);
fprintf(cli,"%s",novocliente.cpf);
system("cls");
printf("Codigo: %u",novocliente.codigo);
printf("\nNome: %s",novocliente.nome);
printf("CPF: %s",novocliente.cpf);
getchar();
fclose(cli);
//system("cls");
printf("\n\nPRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");
return ClienteNovo;
}
else
{
printf("Cadastro INVALIDO",160);
}
}
void listar_cliente(Cliente* primeiro)
{
FILE *cli;
cli = fopen("cadastrocliente.txt","r");
if(cli == NULL)
{
printf("Arquivo NAO pode ser aberto.\n");
system("pause");
//return 0;
}
Cliente* atual; //Ponteiro para percorrer a lista sem perder a referência do primeiro elemeto da lista.
//Imprimindo os clientes da lista, e suas respectivas informações.
for(atual = primeiro; atual != NULL; atual = atual -> prox)
{
printf("\n Nome:");
printf("%s", atual -> nome);
printf("\n CPF:",162);
printf("%s", atual -> cpf);
printf("\n Codigo:");
printf("%u",atual -> codigo);
printf("\n\n");
}
if(primeiro == NULL)
{
printf("\n\nNENHUM CLIENTE CADASTRADO.\n");
}
fclose(cli);
printf("\n\nPRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");
}
Cliente* excluir_cliente(Cliente* primeiro)
{
FILE *cli;
cli = fopen("cadastro.txt","a");
if(cli == NULL)
{
printf("Arquivo NAO pode ser aberto");
system("pause");
return 0;
}
Cliente *anterior=NULL;// ponteiro para saber o elemento anterior ao elemento atual da lista.
Cliente *atual=primeiro;//Ponteiro para percorrer a lista sem perder o primeiro elemento da lista.
unsigned long int codigo=0;
//Requisitando e lendo o código do cliente a ser excluido.
printf("\nCodigo do cliente a ser excluido:",162,161);
fflush(stdin);
scanf("%u",&codigo);
//Procurando o cliente na lista
while(atual!= NULL && atual->codigo!=codigo)
{
anterior=atual;
atual=atual->prox;
}
//Mensagem caso o cliente não seja encontrado.
if(atual==NULL)
{
printf("\n Cliente NAO encontrado.",198);
printf("\n\nPRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");
return primeiro;
}
//Excluindo o primeiro cliente da lista.
if(anterior==NULL)
{
printf("\n Conteudo EXCLUIDO com sucesso.",163,161);
primeiro=atual->prox;
}
//Excluindo um cliente do meio da lista.
else
{
printf("\n Conteudo excluido com sucesso.",163,161);
anterior->prox=atual->prox;
}
//Desalocando o espaço da memoria.
free(atual);
printf("\n\nPRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");
return primeiro;
getchar();
fclose(cli);
}
void alterar_cliente(Cliente* primeiro)
{
char nome_substituto[40], cpf_substituto[40];
unsigned long int codigo;
Cliente* atual=primeiro;
//Requisitando e lendo o codigo do cliente a ser alterado.
printf("\n\nCodigo do cliente a ser alterado:",162);
fflush(stdin);
scanf("%u",&codigo);
//Procurando o cliente na lista.
while(atual!=NULL && atual->codigo!=codigo)
{
atual= atual->prox;
}
//Alterando os dados do cliente.
if(atual!=NULL)
{
printf("\nNovo Nome:");
fflush(stdin);
fgets(nome_substituto,40,stdin);
strcpy(atual->nome,nome_substituto);
printf("\nNovo cpf:",135);
fflush(stdin);
fgets(cpf_substituto,40,stdin);
strcpy(atual->cpf,cpf_substituto);
printf("\n Dados ALTERADOS com sucesso.");
}else{
printf("\n\n Cliente NAO Encontrado",198);
}
printf("\n\n\nPRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");
}