Ir ao conteúdo

Posts recomendados

Postado

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
Postado

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
Postado

@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
Postado

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
Postado

@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
Postado
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...

 

Postado

@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...

Postado
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
  • 6 meses depois...

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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...