Ir ao conteúdo
  • Cadastre-se

C excluir item de arquivo.txt


gebuchh

Posts recomendados

Fazendo um código em C, em que eu possa criar itens usando Arquivo, porém não consigo fazer uma Função para deletar um item especifico do Arquivo.txt

Minha função de cadastrar

 

void cadastraProd(){ //mudar tipo funcao
    char resposta, impressao[22];
    int qntd, cont = 0, linhas = contaLinhas();
    struct produto teste;
    ptrArqProd = fopen("produtos.txt", "a");

    printf("qnts produtos deseja cadastrar:");
    scanf("%i", &qntd);
    do{
        if(qntd == 1 || cont < qntd)
            fprintf(ptrArqProd, "\n");
        printf("\nDados do produto:\n");
        teste.id = linhas + cont + 1;
        printf("id: %i", teste.id);
        fprintf(ptrArqProd, "%d-", teste.id);
        printf("\nQuantidade:");
        scanf("%i", &teste.qntd);
        fprintf(ptrArqProd, "%i-", teste.qntd);
        printf("Preco:");
        scanf("%f", &teste.preco);
        fprintf(ptrArqProd, "%.2f", teste.preco);

        printf("id: %d  |  qntd: %d  |  preco: %f\n", teste.id, teste.qntd, teste.preco);

        fflush(stdin); //PERGUNTAR PROFESSOR
        cont++;
    } while(cont < qntd);

    printf("cadastrar mais produtos?(s/n) ");
    scanf("%c", &resposta);

    if(resposta != 'n')
        cadastraProd();

    fclose(ptrArqProd);
    printf("\n");
}

 

 

Link para o comentário
Compartilhar em outros sites

Não seria melhor você deixar a função de cadastrar só para cadastrar?

 

Dessa maneira.

#include <stdio.h>
#include <stdlib.h>

struct dados_produto
{
    int id;
    int quantidade;
    float preco;
};

void
salvarCadastro(struct dados_produto *produto);

int
cadastraProduto(struct dados_produto *produto);

int main(void)
{
    struct dados_produto produto;
    if (cadastraProduto(&produto)) {
        char opcao;
        printf("id:%d\n", produto.id);
        printf("quantidade:%d\n", produto.quantidade);
        printf("preco:%.2f\n", produto.preco);
        printf("Salvar cadastro no arquivo\n");
        printf("S\\N\n");
        scanf("%c%*c", &opcao);

        if (opcao == 'S' || opcao == 's') {
            salvarCadastro(&produto);
            printf("Cadastro salvo no arquivo\n");
        }
    } else {
        printf("Cadastro descartado\n");
    }
    getchar();
    return(0);
}

void
salvarCadastro(struct dados_produto *produto)
{
    int contador;
    char buffer[256];
    FILE *arq = fopen("Cadastros.csv", "r+");
    if (arq == NULL) {
        arq = fopen("Cadastros.csv", "w+");
        if (arq == NULL) {
            perror("Nao foi possivel de criar ou ler o arquivo");
            exit(EXIT_FAILURE);
        }
    }

    /* Pula todos os cadastros */
    do {
        fgets(buffer, 256, arq);
    } while (!feof(arq));

    /* Salva o cadastro */
    fprintf(arq, "%d,%d,%.2f\n", produto->id, produto->quantidade, produto->preco);

    fflush(arq);

    fclose(arq);
}

int
cadastraProduto(struct dados_produto *produto)
{
    struct dados_produto tmp;
    char opcao;
    do {
        printf("Digite o id do produto\n");
        scanf("%d%*c", &tmp.id);
        printf("Digite a quantidade de produtos\n");
        scanf("%d%*c", &tmp.quantidade);
        printf("Digite o preco do produto\n");
        scanf("%f%*c", &tmp.preco);

        printf("O cadastro esta correto\n");
        printf("S\\N\n");
        scanf("%c%*c", &opcao);
        if (opcao == 'S' || opcao == 's') {
            *produto = tmp;
            printf("Cadastro feito com sucesso!\n");
            return(1);
        }

        printf("Cadastrar novamente?\n");
        printf("S\\N\n");
        scanf("%c%*c", &opcao);
    } while (opcao == 'S' || opcao == 's');
    return(0);
}

Assim fica mais simples para remover um cadastro depois.

Link para o comentário
Compartilhar em outros sites

@André Rafael   e a função que você está usando para excluir dados do arquivo txt ? ,   o comando fflush(stdin) serve para limpar o buffer do teclado ,  e você pode substituir ele por esse 

while (char c = fgetc(stdin) != '\n'); // melhor esse

e para excluir você pode pegar o dado que você quer excluir e abrir o arquivo para ler e um outro auxiliar para  guardar os dados que você quer manter nele assim você lê o arquivo e verifica se não é o que você quer deletar e se não for você coloca no arquivo auxiliar e vai assim até o final , aí fecha os dois arquivos e usa o comando 

remove(nome_do_arquivo);

isso vai deletar todo aquele arquivo , mas os dados que você não queria deletar estarão no arquivo auxiliar , aí você usa o comando

rename(nome_do_arquivo_auxiliar,"nome_do_arquivo_deletado");

aí seu arquivo estará como estava antes disso tudo , porém , estará sem aqueles dados que você queria deletar .

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!