Ir ao conteúdo
  • Cadastre-se
Nadeem

C++ setlocale(LC_ALL, "Portuguese"); não funciona no Visual Studio 2019

Posts recomendados

Boa noite a todos, 

Fiz muita pesquisa sobre como resolver a problema de acentuação da língua portuguesa que ocorreu logo depois de atualizar para windows 10 mas sem sucesso até o momento. vou postar o meu código aqui para análise, quero muito resolver este problema se puder me ajudar eu agradeço imensamente. 

 

Eu sou iniciante e para treinar eu uso o visual studio 2019 desde que comecei em 2020.

#include <iostream>
#include <stdlib.h>
#include <conio.h>
#include <locale.h>
#include <cstdlib>
#include <clocale>
#include <Windows.h>
int main()
{
    //Declaração das variáveis.
    int getch(void);
    int indice=0;
    float media;
    char nome[40];
    char letra = 's';
    float nota[3];
    const char* locale = setlocale(LC_ALL, "portuguese-brazilian");// uma das tentativas
    //Inicializando as variáveis.
    media = 0;
   
    while (letra == 's' || letra == 'S')
    {
        setlocale(LC_ALL, "portuguese-brazilian");// são uma das tentativas
        locale = setlocale(LC_ALL, ""); // são uma das tentativas
        setlocale(LC_ALL, "pt_BR_utf8");// são uma das tentativas
        setlocale(LC_ALL, "Portuguese");// sempre usei este função com #include <locale.h> mais depois de atualizar para o windows 10 paro de funcionar e desde então não conseguir resolver 
        printf("Nóme do %d aluno: ",indice+1);
        rewind(stdin);
        gets_s(nome);

        for (int i = 0; i <= 2; i++)
        {
            printf("\nDigite a %d nota: ",i+1);
            scanf_s("%f", &nota[i]); 
        }
        media = (nota[0] + nota[1] + nota[2]) / 3;
        indice++;

        printf("\nA media do aluno %s eh: %.2f", nome, media);
        printf("\n\nDeseja consultar a nota do próximo aluno (s/n)? ");
        rewind(stdin);
        letra = _getche();
        system("cls");

    }
   
}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso nada tem a ver com Visual Studio ou com o Windows 10.


Você está programando em C ou C++? O único elemento de C++ que encontrei em seu programa é o #include para <iostream> e o tema no tópico marcado como C++

 

Onde você precisa de acentuação? Na tela apenas?

 

 

 

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

@arfneto C++ na realidade eu tava tentando acentuar qualquer palavra printf("Nóme ); porém tava fazendo apenas teste para ver se vai funcionar a acentuação.

 

Eu quero aprender acentuar pois faço muito exercício e preciso resolver isso que me incomoda bastante e até o momento não achei a solução. Se poder me orientar eu agradeço.

WhatsApp Image 2020-07-09 at 22.40.00.jpeg

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu acho que isso não vai acrescentar muito em seu aprendizado, em C ou C++. 

Acentuação em programas de console é um inferno. Se quiser ler ou gravar arquivos com acentos outro inferno. Se quiser ou precisar receber arquivos com caracteres acentuados é o d1@b0 também.

Sugiro muito fugir disso a menos que seja bem pago ou que receba uma boa nota.

 

De todo modo, rode esse programa em sua máquina e talvez ajude a entender algumas coisas. É um programa em C mas não faz diferença no Visual Studio

#define _CRT_SECURE_NO_WARNINGS

//#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <locale.h>
#include <windows.h>

void testa();

int main()
{
    char nome[40];

    const char* locale = setlocale(LC_ALL, "portuguese-brazilian");// uma das tentativas
    char    xlocale[40];
    char*   local_original = xlocale;
    local_original = setlocale(LC_ALL, NULL);
    printf("\tLocale original: '%s'\n", local_original);
    printf("\tANSI Console CodePage: '%d'\n", GetACP());
    printf("\tConsole CP: '%d'\n", GetConsoleCP());
    int pagina_ocp = GetConsoleOutputCP();
    printf("\tConsole Output CP: '%d'\n", pagina_ocp);

    SetConsoleOutputCP(437);
    SetConsoleCP(437);
    printf("\tConsole CodePage '%d' Output CodePage: '%d'\n", 
        GetConsoleCP(), GetConsoleOutputCP());
    testa();
    SetConsoleCP(850);
    SetConsoleOutputCP(850);
    setlocale(LC_ALL, "Portuguese");
    printf("\tConsole CodePage '%d' Output CodePage: '%d'\n",
        GetConsoleCP(), GetConsoleOutputCP());
    testa();
    SetConsoleOutputCP(pagina_ocp);
};

void testa()
{   // esse e um trecho de um programa de um aluno
    // esta aqui so para testar os acentos
    printf("\n***** teste operações *****\n");;
    printf("=-= =-= =-= OPERAÇÕES =-= =-= =-= \n");
    printf("[ 1 ] - Adição \n");
    printf("[ 2 ] - Multiplicação \n");
    printf("[ 3 ] - Subtração \n");
    printf("[ 4 ] - Divisão \n");
    printf("\n***** áéíóúãõñ fim do teste *****\n\n\n");;
};  // testa()

E veja a documentação dessas coisas em https://docs.microsoft.com/en-us/windows/console/console-functions. É bastante completa eu acho.

 

Entenda que só o locale não é suficiente para garantir que isso vai funcionar. Há a página de saída da console, que pode não ter as letras que quer, há a fonte atual em uso na console, que pode não ter alguma letra, há a fonte de saída da console, um inferno.
 

image.png.a627276bc0a2b1adeec799cca71b325e.png


Se você está rodando seus programas no "novo" terminal do Windows 10 em geral é mais tranquilo. Mas no prompt é diferente, no IDE é diferente...

Em C e C++ em Windows no Windows 10 é muito melhor porque tem o Terminal do Windows, e tem Unicode, com mais de um milhão de símbolos disponíveis e tal. Mas para usar isso precisa usar as funções W, como wprintf() por exemplo, e mesmo as funções da API do Windows tem em geral uma versão W. No fundo o Windows usa isso há décadas.

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

@arfneto Eu tentei mas não deu certo, perdi muito tempo e sair sem o resultado positivo, so aluno e tento não deixar dúvidas pra trás, dificuldades e desafios sempre vai surgindo, essa é uma deles que inclusive me deu tanta dor de cabeça, valeu pelo conselho e ajuda mas eu particularmente não gosto de deixar nada pra trás, vai ficar na minha cabeça até que consiga resolver e iria postar aqui o resultado. 

  • Curtir 1
  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
8 horas atrás, Nadeem disse:

Eu tentei mas não deu certo

 

o que não deu certo?

Rodou o programa?

Leu algo da documentação?

Entendeu o que eu expliquei sobre isso ser mesmo um inferno?

Entendeu que precisa talvez mudar as codepages?

rodou o programa no Terminal do windows?

ou rodou apenas dentro do IDE?

 

O programa que te mandei tem até um exemplo de saída. 

 

8 horas atrás, Nadeem disse:

vai ficar na minha cabeça até que consiga resolver

 

porque não diz o que aconteceu quando testou o programa, posta a imagem da saída do programa aqui, coisas assim? pode economizar seu tempo e ajudar outros...

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@arfneto Então, o que não deu certo é aquilo que eu estou tentando resolver, testei sim claro, li o documentário mas não terminei ainda, vou finalizar-lo assim que tentasse resolver novamente, deixei de insistir de resolver a problema por agora porque tenho trabalhos para entregar em breve, por isso falei que iria resolver a problema e postar aqui depois, e vou explicar o que eu fiz para resolver...

Compartilhar este post


Link para o post
Compartilhar em outros sites
25 minutos atrás, Nadeem disse:

Então, o que não deu certo é aquilo que eu estou tentando resolver, testei sim claro, li o documentário mas não terminei ainda, vou finalizar-lo assim que tentasse resolver novamente, deixei de insistir de resolver a problema por agora porque tenho trabalhos para entregar em breve, por isso falei que iria resolver a problema e postar aqui depois, e vou explicar o que eu fiz para resolver..

 

Você apenas repetiu o que tinha dito.

 

Espero que tenha entendido a partir do que eu te expliquei o que falta em seu programa para "resolver" e entenda que em muitos casos sequer tem solução. 
 

27 minutos atrás, Nadeem disse:

por isso falei que iria resolver a problema e postar aqui depois, e vou explicar o que eu fiz para resolver

 

Apenas entenda que precisa saber a codepage de saída da console, a codepage da console, o locale, e também a fonte em uso na console do computador em que seu programa está rodando, e não supor que todo computador é igual ao seu computador ou mesmo que seu computador não muda nunca.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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...

Aprenda a ler resistores e capacitores

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!