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

Problema de Acentuação (Sublime)

Estou usando o Sublime pra escrever o código, e meu SO é Windows 10. Depois de compilar e fazer rodar o .exe no prompt de comando, o texto impresso sai com erros de acentuação. Código:

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

int main() {
    printf("*****************************************\n");
    printf("*Bem-vindo ao nosso jogo de adivinhação!*\n");
    printf("*****************************************\n");

    int numeroSecreto = 42;

    printf("O número %d é o secreto. Não conta pra ninguém!", numeroSecreto);
}

Como o prompt imprime o código:


Bem-vindo ao nosso jogo de adivinhação!


O n├║mero 42 ├® o secreto. N├úo conta pra ningu├®m!

Faltou alguma coisa de formatação na hora da instalação do GCC? Os packeges selecionados foram: "mingw32-base" e o "mingw32-gcc-g++"

7 respostas

Luiz Gustavo. Fiz exatamente como está no link que vc enviou, inserindo o '#include <locale.h>' (que já tinha no 1º código) e o 'setlocale(LC_ALL, "Portuguese")'. Código:

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

int main() {

    setlocale(LC_ALL, "Portuguese");

    printf("*****************************************\n");
    printf("*Bem-vindo ao nosso jogo de adivinhação!*\n");
    printf("*****************************************\n");

    int numeroSecreto = 42;

    printf("O número %d é o secreto. Não conta pra ninguém!", numeroSecreto);
}

O resultado no prompt foi:

*****************************************
*Bem-vindo ao nosso jogo de adivinhação!*
*****************************************
O número 42 é o secreto. Não conta pra ninguém!

Continua dando erro de acentuação!

Inclusive copiei o código usado como exemplo no link que vc enviou. Compilei e executei:

#include <stdio.h>
#include <stdlib.h>
//Adicione essa biblioteca que tem a funcao setlocale
#include <locale.h>

int main(){
    //adicione essa função para habilita a acentuação e caracteres do português
    setlocale(LC_ALL, "Portuguese");

    printf("\nConteúdo com as caracteres à, é, ç");    

    return 0;
}

Resultado no prompt:

Conteúdo com as caracteres à , é, ç

Continua o mesmo erro...

solução!

Ops, te mandei o link mas nem tinha testado.

Veja se assim funciona:

  • Não use mais a lib locale.h
  • Salve o seu código-fonte em UTF-8 caso não esteja
  • Compile
  • No prompt utilize o comando
    chcp 65001
  • rode o programa

Aqui funcionou assim

*****************************************
*Bem-vindo ao nosso jogo de adivinhação!*
*****************************************
O número 42 é o secreto. Não conta pra ninguém!

Luiz Gustavo. Muito obrigado. Problema resolvido! Acentuação correta.

Só mais uma dúvida, se o amigo puder esclarecer: o que esse "chcp 65001" faz dentro do programa pra resolver esse problema? O que ele é exatamente?

Altera a codificação de caracteres do prompt. 65001 se refere ao utf-8.

https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/chcp

https://docs.microsoft.com/en-us/windows/win32/intl/code-page-identifiers

Você pode colocar dentro do código se você preferir

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

int main() {
    printf("testando acentos çàáéóú \n");
    system("chcp 65001");
    //system("cls");
    printf("testando acentos çàáéóú \n");
}

Luiz Gustavo, obrigado pelas explicações. Dúvidas esclarecidas e problemas resolvidos. Um fraterno abraço.