0
respostas

funcao fprintf

preciso alterar um texto no meio do arquivo, mas estou enfrentando alguns problemas, basicamente eu preciso alterar o preço do produto, segundo o novo preco que o usuario digitar, ja usei a funcao fprintf pra sobrescrever algo no arquivo, inclusive tem uma funcao que troca a primeira linha do arquivo, que esta escrita a quantidade de produtos, pela quantidade nova quando um produto é adicionado, e ela funciona perfeitamente, com o fprintf, segue os codigos: codigo que substitui o preco de um produto no arquivo, que nao esta funcionando. e o mais estranho, é q ele devolve uma quantidade de letras que foram escritas para a var a, mas nada é escrito

typedef struct{

    char nome[10];
    int codigo;
    double preco;

}produtos;

void alteraPreco(char *nome, char *nomeArquivo, int quantidade, double preco){
    produtos comparar;
    produtos teste;

    FILE *f;
    f = abriArquivo(nomeArquivo, "r+");
    int i;
    for( i = 0; i<quantidade; i++){
        fscanf(f, "%s %d %lf", &(comparar.nome), &(comparar.codigo), comparar.preco);
        if(strcmp(comparar.nome, nome) == 0){
            break;
        }
    }
    fseek(f, 0, SEEK_SET);
    for(int j = 0; j<i; j++){
        fscanf(f, "%s %d %lf", &(teste.nome), &(teste.codigo), &(teste.preco));
    }

    int a = fprintf(f, "%s %d %lf", comparar.nome, comparar.codigo, preco);
    fclose(f);
    printf("%d", a);

}

codigo que funciona e sobrescreve a primeira linha

void cadastrarProduto(char *nomeArq, char *nome, int codigo, double preco){
    FILE *f;
    produtos substituir;
    f = abriArquivo(nomeArq, "r+");
    fscanf(f, "%s %d %lf", &(substituir.nome), &(substituir.codigo), &(substituir.preco));
    substituir.codigo++;
    fseek(f, 0, SEEK_SET);
    fprintf(f, "%s %d %.2lf", substituir.nome, substituir.codigo, substituir.preco);
    fseek(f, 0, SEEK_END);
    fprintf(f, "\n%s %d %f", nome, codigo, preco);
    fclose(f);
}

arquivo de texto

quantidade 3 3
ype 13454664 6.0
sabonete 154643154 3.50
arroz 564543644 20.50