Ir ao conteúdo

Posts recomendados

Postado

Criei um crud básico em C, porém estou tendo dificuldades em fazer a função atualizar e deletar, e sempre que compilo aparece o aviso "[Warning] '_errno' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes]"

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

FILE *ptrArqProd;
extern int errno;

struct produto {
    int id;
    //char texto[250];
    int qntd;
    float preco;
    int tipo;

    //struct produto teste;
};

void cadastraProd();

void consultaProd();

void editaProd();

void removeProd();

int contaLinhas();

int main(){

    int menu;
    do {
        printf("\nMENU\n(1) Cadastrar produto(s)\n(2) Consultar estoque\n(3) Atualizar produto(s)\n(4) Deletar produto(s)\n(0) Sair\n");
        printf("Acao desejada:");
        scanf("%i", &menu);
        switch(menu){
            case 1:
                cadastraProd();
                break;

            case 2:
                consultaProd();
                break;

            case 3:
                editaProd();
                break;

            case 4:
                removeProd();
                break;

            case 5:
                contaLinhas();
                break;

            case 0:
                printf("\nPrograma finalizado\n");
                break;


            default:
                printf("\nnao tem easteregg aqui\n");
                break;

        }
    } while(menu);

    return 0;
}

void cadastraProd() { //mudar tipo funcao
    char resposta, impressao[22];
    int qntd, cont = 0, linhas = contaLinhas();
    struct produto teste;
    ptrArqProd = fopen("C:\\Users\\Lenovo\\Downloads\\aed\\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");
}

void consultaProd(){
    char impressao[22];

    ptrArqProd = fopen("C:\\Users\\Lenovo\\Downloads\\aed\\produtos.txt", "r");

    while(fgets(impressao, 22, ptrArqProd) != NULL){
        printf("%s", impressao);
    }

    printf("\n");

    fclose(ptrArqProd);
}

void editaProd(){
    char impressao[22];
    char *id_pesquisa = "";
    int i=0,flag=0,cont=1;
    char teste[22];
    struct produto teste1;
    ptrArqProd = fopen("C:\\Users\\Lenovo\\Downloads\\aed\\produtos.txt", "r");

    printf("Insira o ID do produto que deseja atualizar: ");
    scanf("%s",id_pesquisa);

    while(fgets(impressao, 22, ptrArqProd) != NULL){
        for(i=0;i<strlen(impressao);i++){
            if(impressao[i]=='-') break;
            teste[i] = impressao[i];
        }
        teste[i]='\0';
        if(strcmp(teste,id_pesquisa)==0){
            flag = 1;
            break;
        }
        cont++;
    }
    if(flag==0){
        printf("Produto nao encontrado");
        return;
    }

    teste1.id = atoi(id_pesquisa);

    printf("Insira a nova quantidade do produto de ID %d : ",teste1.id);
    scanf("%d",&teste1.qntd);

    printf("Insira o novo preco do produto de ID %d : ", teste1.id);
    scanf("%f",&teste1.preco);


    //Removendo a linha, para inserir de novo no arquivo
    FILE *input = fopen("C:\\Users\\Lenovo\\Downloads\\aed\\produtos.txt", "r"); //Arquivo de entrada.
    FILE *output = fopen("C:\\Users\\Lenovo\\Downloads\\aed\\transferindo.txt", "w"); //Arquivo de saída.
    char texto[1001] = ""; //Uma string larga o suficiente para extrair o texto total de cada linha.
    int linha_selecionada = cont,linha_atual = 1;

    while(fgets(texto, 1001, input) != NULL){
        if(linha_atual != linha_selecionada){
            fputs(texto, output);
        }
        memset(texto, 0, sizeof(char) * 1001);
        linha_atual += 1;
    }
    fclose(ptrArqProd);
    fclose(input);
    fclose(output);

    remove("C:\\Users\\Lenovo\\Downloads\\aed\\produtos.txt");
    rename("C:\\Users\\Lenovo\\Downloads\\aed\\transferindo.txt", "C:\\Users\\Lenovo\\Downloads\\aed\\produtos.txt");
    fflush(stdin); //PERGUNTAR PROFESSOR

    //inserindo novamente a linha editada
    ptrArqProd = fopen("C:\\Users\\Lenovo\\Downloads\\aed\\produtos.txt", "a");
    fprintf(ptrArqProd, "\n");
    fprintf(ptrArqProd, "%d-", teste1.id);
    fprintf(ptrArqProd, "%i-", teste1.qntd);
    fprintf(ptrArqProd, "%.2f", teste1.preco);
    fflush(stdin); //PERGUNTAR PROFESSOR

    printf("Produto editado com sucesso\n");

    fclose(ptrArqProd);
}

void removeProd(){
    char *id_pesquisa="";
    char impressao[22],teste[22];
    int i=0,flag=0,cont=1;
    ptrArqProd = fopen("C:\\Users\\Lenovo\\Downloads\\aed\\produtos.txt", "r");

    printf("Insira o ID do produto que deseja remover: ");
    scanf("%s",id_pesquisa);

    while(fgets(impressao, 22, ptrArqProd) != NULL){
        for(i=0;i<strlen(impressao);i++){
            if(impressao[i]=='-') break;
            teste[i] = impressao[i];
        }
        teste[i]='\0';
        if(strcmp(teste,id_pesquisa)==0){
            flag = 1;
            break;
        }
        cont++;
    }
    if(flag==0){
        printf("Produto nao encontrado\n");
        return;
    }

    //Removendo a linha, para inserir de novo no arquivo
    FILE *input = fopen("C:\\Users\\Lenovo\\Downloads\\aed\\produtos.txt", "r"); //Arquivo de entrada.
    FILE *output = fopen("C:\\Users\\Lenovo\\Downloads\\aed\\transferindo.txt", "w"); //Arquivo de saída.
    char texto[1001] = ""; //Uma string larga o suficiente para extrair o texto total de cada linha.
    int linha_selecionada = cont,linha_atual = 1;

    while(fgets(texto, 1001, input) != NULL){
        if(linha_atual != linha_selecionada){
            fputs(texto, output);
        }
        memset(texto, 0, sizeof(char) * 1001);
        linha_atual += 1;
    }
    fclose(ptrArqProd);
    fclose(input);
    fclose(output);

    remove("C:\\Users\\Lenovo\\Downloads\\aed\\produtos.txt");
    rename("C:\\Users\\Lenovo\\Downloads\\aed\\transferindo.txt", "C:\\Users\\Lenovo\\Downloads\\aed\\produtos.txt");
    fflush(stdin); //PERGUNTAR PROFESSOR
}

int contaLinhas(){
    char impressao[22];
    int i = 0;

    ptrArqProd = fopen("C:\\Users\\Lenovo\\Downloads\\aed\\produtos.txt", "r");
    while(fgets(impressao, 22, ptrArqProd) != NULL){
        i++;
    }
    printf("numero de produtos cadastrados:%i", i - 2);
    printf("\n");

    fclose(ptrArqProd);
    return (i - 2);
}

 

  • Confuso 1

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!