Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

fprintf no início

Vi que ele insere informações no arquivo e apaga as antigas. Mas ele apaga como? 1 byte, 1 bit, 1 letra ou algo do tipo?

3 respostas

Olá Gabriel.

Na verdade ele não apaga o conteúdo antigo, ele vai sobrescrever os dados. Vamos analisar esse trecho de código:

    int qtd;
        fscanf(f, "%d", &qtd);
        qtd++;
        fseek(f, 0, SEEK_SET);
        fprintf(f, "%d", qtd);

        fseek(f, 0, SEEK_END);
        fprintf(f, "\n%s", novapalavra);

Primeiro faremos a leitura da quantidade atual e salvar na variável qtd, depois somamos 1 nessa variável.

Agora vem a parte importante, com a função fseek posicionamos o "cursor" no incio do arquivo e depois imprimimos a variável qtd nessa posição.

Podemos fazer uma analogia com a função insert do teclado, onde o que é digitado sobrescreve o que estava lá antes.

O importante aqui é notar que aqui isso vai acontecer como se estivemos digitando então vai ser como você disse uma "letra" por vez, mais precisamente um char por vez.

Por exemplo se no inicio do arquivo tínhamos o char 3, apos a operação o char 4 ocuparia esse lugar.

Uma curiosidade que podemos notar é que se no inicio do arquivo tivéssemos o numero 12 e escrevêssemos o numero 3, apenas o primeiro char seria sobrescrito, então teríamos como resultado 32 escrito no arquivo, isso não vai ser um problema para o nosso projeto já que o numero sempre vai aumentar.

Espero ter ajudado, mas qualquer duvida não hesite em perguntar.

Bons Estudos.

Não fiz a pergunta de forma correta.

Supondo que a primeira linha seja:

3

Então ela estará:

3\n

Nesse caso, 1 lista com dois char. Quando eu der insert e colocar o valor 34, o \n será apagado?

solução!

Olá Gabriel.

Exatamente isso que você falou, já que o \n também é um char como qualquer outro ele será sobrescrito.

Criei um arquivo chamado palavras.txt e nele coloquei apenas o 3 e uma quebra de linha:

3\n

Depois rodei esse código que faz o que foi proposto por você:

#include<stdio.h>

int main () {

    FILE* f;

    f = fopen("palavras.txt", "r+");

    if(f == 0) {
        printf("Banco de dados de palavras não disponível\n\n");
        return 1;
    }

    int qtd;
    fscanf(f, "%d", &qtd);
    printf("antes: %d\n", qtd);

    int num = 32;
    fseek(f, 0, SEEK_SET);
    fprintf(f, "%d", num);

    fseek(f, 0, SEEK_SET);
    fscanf(f, "%d", &qtd);
    printf("depois: %d", qtd);

    fclose(f);

    return 0;
}

E tive como resultado no console:

antes: 3
depois: 32

E no arquivo tive o resultado que estávamos esperando:

32

O numero 32 sem o espaço.

Consegui responder sua duvida ? Qualquer coisa só falar.

Bons Estudos.