Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Adicionar palavra, não está a funcionar

Eu aceitei o desafio e reproduzi o jogo, mas reescrevi o código todo novamente, mas na parte de adicionar uma nova palavra, quando eu coloco "S", o programa dá shut down

void adicionar_palavra(){
    
    char escolha[30];
    
    printf("Quer adicionar alguma palavra nova ao dicionario? (S/N)\n");
    scanf(" %c", &escolha);
    
    char nova_palavra[30];

    if(escolha == " S"){
        printf("Qual palavra pretende acrescentar?\n");
        
        FILE* dicionario;

        dicionario = fopen("dicionario.txt", "r+"); //dá permissões de leitura de arquivos e de escrita

        if (dicionario == 0){ //caso o ficheiro esteja corrompido na base de dados
            printf("Desculpe, banco de dados não disponivel\n\n");
            exit(1);
        }

        int qtd;
        fscanf(dicionario, "%d", &qtd);
        qtd++;

        fseek(dicionario, 0, SEEK_SET); //Vai posicionar onde o leitor vai querer ler
        fprintf(dicionario, "%d", qtd); //Como o documento está a ler a primeira linha, vai ser escrito a variável "qtd"

        fseek(dicionario, 0, SEEK_END); //Vai direcionar o  ponteiro para a última linha
        fprintf(dicionario, "\n%s", nova_palavra); //Como está na última linha, o que vai fazer é colocar um "Enter", e escrever a "novapalavra"

        fclose(dicionario);
    }
    else if(escolha == "N"){
        exit(1);
    }
}

Essa é a parte do código que está a dar "conflito", alguém pode ver o que pode estar errado?

1 resposta
solução!

Olá Miguel, td bem? espero que sim!

O erro ocorre aqui:

char escolha[30];
    
    printf("Quer adicionar alguma palavra nova ao dicionario? (S/N)\n");
    scanf(" %c", &escolha);

vc declarou um array de caracteres (char escolha[30]) e está recebendo no scanf um unico caractere (scanf(" %c", &escolha)).

solução:

  • declarando a variável como "char"
char escolha;

na sua comparação também há um erro:

if(escolha == " S")  //há um espaço antes do 'S' 

como o espaço é um caractere, vc estaria comparando dois caracteres a variável "escolha".

solução:

if(escolha == "S") //remover o espaço antes

Espero ter ajudado!! se sim não esqueça de marcar esse post como "Solução", por gentileza!