Ir ao conteúdo
  • Cadastre-se

Escrever em Português


Posts recomendados

Bom dia, pessoal.

Este é meu primeiro post, e assim posso não colocar a questão como deve ser.

Eu uso o Code::Blocks no Windows 10, e estou com um problema que não consegui resolver, por mais que tenha pesquisado na Internet, inclusive me baseando em respostas aqui deste Fórum.

Meu problema é o seguinte: em um programa, estou utilizando o setlocale(LC_ALL,"Portuguese") para que as perguntas apareçam na tela em português do Brasil; mas quando faço uma entrada de dados também em português, ele dá erro quando retorna para a tela o printf.

Exemplo:

  Escrito no Programa      Mostra na tela      Informa na tela     Retorna na tela     Como aparece na tela

  printf("Início : ");                Início:                    Março                    Mar╬o                       Início:  Mar╬o

 

Se, no entanto, retiro o setlocale(LC_ALL,"Portuguese"), ocorre o contrário, ou seja, acaba ficando assim:

Exemplo:

  Escrito no Programa      Mostra na tela      Informa na tela     Retorna na tela     Como aparece na tela

      printf("Início : ");          InÝcio:                           Março                  Março                     InÝcio:  Março

 

Alguém poderia me ajudar para fazer com que, tanto a informação do programa na tela, quanto a entrada do usuário, apareçam em português? Agradeço sua atenção e auxílio desde já.

 

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Esta é a parte do programa que estou tentando resolver. Além disso, também serão digitados nomes e outros, que levam acento (à, á, ã, ç, etc). Mas resolvendo um, resolve-se o resto.

 

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <stdio.h>
#include <locale.h>
#include <vector>
#include <string>

using namespace std;


main (void)
{
     setlocale(LC_ALL, "Portuguese");

    std::string inip;
    std::string fimp;
    std::string nomeal;
    std::vector<std::string>nomes;

    char resp;

    cout << "Informe os Dados do Período";
    cout << "\n\nInício: ";
    std::getline(std::cin, inip);
    cout << "\nFinal: ";
    std::getline(std::cin, fimp);

     fflush(stdin);
    system("cls");
        cout << "Notas no Período de " << inip << " a " << fimp;
        std::cout << "\n\nInforme o nome do aluno: ";
        std::getline(std::cin, nomeal);
        if(resp != 'n')
            nomes.push_back(nomeal);

    system("cls");

    system("pause");
    return 0;
}

 

As duas imagens abaixo estão com o comando setlocale(LC_ALL, "Portuguese").

A entrada dos dados, assim como mostrado no código, está correta, e assim aparece no monitor.

image.thumb.png.973f4a8a18ee7db3e531e072051df027.png

 

Esta é a outra entrada, já com os meses, e aparece com erro.

image.thumb.png.38a1a6e08eb27b6469b7e4ddbd8c01af.png

 

As imagens a seguir, seguem sem o comando setlocale(LC_ALL, "Portuguese").

Primeira entrada, já apresentando o monitor com os erros de português.

image.thumb.png.86cdfe868a0904a9a7ace8e8604bce29.png

 

A entrada dos meses feito polo usuário, no caso, apresenta-se normal, como abaixo:

image.thumb.png.2b86e4280bf94f0b3b5fd727efe730b9.png

 

Este é o problema com o qual me deparo. Será que tem alguma maneira de fazer aparecer a pergunta inicial e a resposta em português?

 

Agradeço sua atenção, Xaws

 

 

 

 

image.png

image.png

image.png

image.png

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Luís Henrique Boscato     nessa linha aqui você definiu que quer usar o idioma " portuguese "

setlocale(LC_ALL, "Portuguese");

mas você precisa deixar o sistema definir isso automaticamente, então para isso coloque o comando sem a palavra portuguese, então ficaria assim :

setlocale(LC_ALL, "");
printf("A localidade corrente agora é %s \n",setlocale(LC_ALL,""));

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

1 hora atrás, devair1010 disse:

@Luís Henrique Boscato     nessa linha aqui você definiu que quer usar o idioma " portuguese "


setlocale(LC_ALL, "Portuguese");

mas você precisa deixar o sistema definir isso automaticamente, então para isso coloque o comando sem a palavra portuguese, então ficaria assim :


setlocale(LC_ALL, "");
printf("A localidade corrente agora é %s \n",setlocale(LC_ALL,""));

 

Na realidade isso soluciona o problema em parte.

Que acontece quando você fizer algo como?:
    unsigned char letra;
    cin >> letra;
    
    if ( letra == 'ç' )
        cout << "iguais" << endl;
    else
        cout << "diferentes" << endl;

E por suposto entrar com a letra 'ç'....
Vai dizer diferentes mesmo sendo iguais.

adicionado 2 minutos depois

Isso é um tema algo complexo. Tem que entender um montão de teoria sobre asc2, codepages, charsets, padroes ISO, utf8/16/32, como trocar o codepage do console..... e por aí vai o tiro.

adicionado 4 minutos depois

Isso não é tema fácil de entender, mas assim por em cima, posso proporcionar uma solução para quem ta no windows. Dentro de pouco ponho a solução.
 

adicionado 7 minutos depois
#include <iostream>               // Object cout, manipulator endl
#include <windows.h>

using namespace std;

int main() {
    SetConsoleOutputCP ( 1252 );
    SetConsoleCP ( 1252 );
    cout << "não" << endl;
    cout << "á" << endl;
    cout << "é" << endl;
    cout << "í" << endl;
    cout << "ó" << endl;
    cout << "ú" << endl;
    
    char letra;
    cin >> letra;
    
    if ( letra == 'ç' )
        cout << "iguais" << endl;
    else
        cout << "diferentes" << endl;
        
    cout << (int)'ç' << endl;
    cout << (int)letra << endl;
    
    
    
    
    return 0;
}

Essa é a forma "fácil" de fazer. porém não diria que seja a mais correta, nem muito menos portável já que só funciona no windows.

adicionado 12 minutos depois

As funçoes SetConsoleOutputCP ( 1252 ); SetConsoleCP ( 1252 ); mudam o codepage  do prompt de inglês para o latin 1 tanto na escritura como na leitura. Com isso será possivel não só imprimir em ptbr si não que ler também.

  • Curtir 3
Link para o comentário
Compartilhar em outros sites

Esqueci de informar, desde a primeira postagem, que este programa é em C++.

 

Caro devair1010: se deixo setlocale(LC_ALL, "") ou setlocale(LC_ALL, "setlocale(LC_ALL, "")Portuguese"), não faz diferença, o erro continua ocorrendo quando o usuário digita.

 

Caro vangodp: estas funções não são reconhecidas pelo C++, mas sim fazem parte do C.

 

Acredito que, como foi informado por você (vangodp), este é um problema bastante complexo. Melhor então deixar assim mesmo, e apenas informar a necessidade de digitar sem acentos ou ç.

Agradeço, mesmo assim, a atenção dispensada pelos amigos.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

3 horas atrás, Luís Henrique Boscato disse:

Caro devair1010: se deixo setlocale(LC_ALL, "") ou setlocale(LC_ALL, "setlocale(LC_ALL, "")Portuguese"), não faz diferença, o erro continua ocorrendo quando o usuário digita.

Essa solução serve para mostrar texto em português porém não para ler desde o teclado.

 

3 horas atrás, Luís Henrique Boscato disse:

Caro vangodp: estas funções não são reconhecidas pelo C++, mas sim fazem parte do C.

Quem foi que disse isso? Claro que são reconhecidas pelo c++. A prova disso é que funcionam. Para que funcione você precisa fazer a inclusão da biblioteca de windows.h como já lhe comentou o companheiro isrnick.

 

3 horas atrás, Luís Henrique Boscato disse:

Acredito que, como foi informado por você (vangodp), este é um problema bastante complexo. Melhor então deixar assim mesmo, e apenas informar a necessidade de digitar sem acentos ou ç.

Agradeço, mesmo assim, a atenção dispensada pelos amigos.

Isso dai é empurrar o problema com a barriga para encontra-lo mais adiante. Posso lhe ajudar pero por chat. Se tiver discord busque por vangodp#1605

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

5 minutos atrás, vangodp disse:

 

4 horas atrás, Luís Henrique Boscato disse:

Caro vangodp: estas funções não são reconhecidas pelo C++, mas sim fazem parte do C.

Quem foi que disse isso? Claro que são reconhecidas pelo c++. A prova disso é que funcionam. Para que funcione você precisa fazer a inclusão da biblioteca de windows.h como já lhe comentou o companheiro isrnick.

Prezado vangodp, peço desculpas pela possível má colocação do que disse. Realmente, essa função funcionou, como você está colocando. Houve desatenção minha no todo de seu código, e deixei passar o comando #include <windows.h>. Peço, novamente, que compreendas a minha falta de atenção, e não o querer questionar sua indicação.

Do mesmo modo, quero apenas esclarecer que não estou "empurrando com a barriga", como foi colocado pelo amigo, mas sim houve, repito, apenas desatenção.

Certo de sua compreensão, quero agradecer o interesse em esclarecer sua colocação.

Aproveito e também agradeço ao amigo isrnick pela dica.

Link para o comentário
Compartilhar em outros sites

Sem problemas amigo. Aqui somente buscamos compartilhar informação, nem sempre é fácil de encontrar, sobretudo em temas complicados como esse que ainda hoje em dia temos dificuldade de entender, sendo que levamos vários anos aprendendo, mas podemos nos equivocar também, ou confundir-se, sobre tudo em mim, é natural.

adicionado 2 minutos depois

Como falei posso lhe explicar melhor esclarecimento pelo discord: vangodp#1605
Ou pode entrar aqui no chat grupal: https://discord.gg/CtfUywV

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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