Ir ao conteúdo
  • Cadastre-se

Erro no comando setlocale


fenixpan

Posts recomendados

Olá pessoal,

Estou tendo problemas no meu código quando eu utilizo o comando setlocale:

#include <locale.h>
#include <iostream>

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

Escrevendo um pequeno texto no programa, eu notei que alguns acentos aparecem normalmente e outros não. No lugar dos acentos apareceram uns símbolos estranhos. Eu utilizo o DEV C++ e de acordo com sites que andei pesquisando, esse programa tem um compilador antigo e que talvez o problema desses meus acentos possa ser isso. Porém, eu vi que o Code::Blocks tem o mesmo compilador do DEV C++. Então gostaria de saber o que fazer para resolver esse meu problema.

 

Grato desde já!

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

Mesmo sendo o mesmo compilador, o Code::blocks tem uma versão superior ao DevC++, pois esse ultimo não é atualizado a anos, e é distribuido com um compilador 'instavel'. Ja o CB, possui versões corrigidas do compilador.

Versão corrigida do compilador: https://sourceforge.net/projects/orwelldevcpp/files/Compilers/MinGW/

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

Prove setlocale(LC_ALL, "portuguese-brazilian"); e nos diga aqui se funcionou seu programa.

Primeiro vamos esclarecer qual a versão do devc++ você tem. Se não me engano o dev c++ que funciona em windows 7 adiante é o devc++ ORWELL que é justo a que lhe recomenda @TYSQUARE89. 3bb177871abd4007b326558675da22cc.png

A ultima versão deste programa nesta pagina vem com MinGW 4.8.1.7z, realmente não está mal. Ja ultima versão do compilador do codeblocks oficial vem com TDM-GCC (version 4.9.2, 32 bit, SJLJ) que é algo mais atual porém também não é a ultima versão do compilador atualmente.
Se quiser as ultimas versões do compilador você terá de baixar manualmente e integrar-lhe ao seu IDE. Eu por exemplo uso essa versão aqui, que é a 6.2, porém como falei, descarrego ela separadamente do IDE. Atualmente uso codeblocks junto com MinGW-W64 6.2.0. Codeblocks tem uma versão que você pode baixar sem compilador e lhe permite você o integrar com outros compiladores mais atuais. Em realidade, não vejo necessidade de você passar pelo mesmo processo que eu faço, pois o processo de integração de um compilador com o IDE é algo relativamente complicado se não tiver ideia do que esta fazendo. Usando o compilador que vem com as ultimas versões de codeblocks ou devc++Orwell é mais que suficiente para a maioria, e se não todos os programas que você quer compilar, a diferença pode estar em coisas como fix de bugs importantes ou não tanto, suporte ao um novo padrão da linguagem, como c++17, etc, mas porém os padrões c++11, c++14 e mais antigos são os mesmos e n4ao mudaram. Poucas pessoas fazem uso do ultimo padrão da linguagem atualmente, quando eles(Os criadores dos IDEs) acharem pertinente, certamente incluirão uma versão do compilador mais atualizada e por isso você não precisa esquentar a cabeça. Procure saber a diferença que tem entre uma versão e outra do compilador que você esta usando e assim determinar se necessita ou não a ultima versão de um compilador.

A diferença entre mingw 4.9 e 6.3 esta entre o fix de erros, inclusão de novas funcionalidades, e a inclusão do padrão c++17 na versão 6. Por outro lado a versão 4 tem suporte para c++11 e experimentalmente para c++14. isso é o que diz aqui:
https://gcc.gnu.org/gcc-4.9/changes.html
https://gcc.gnu.org/gcc-6/changes.html

 

Na sua pagina oficial você pode ver todos os padroes https://gcc.gnu.org/. Por exemplo o ultimo padrão que estão trabalhando é o 7.1 que tem suas diferenças esclarecidas em
https://gcc.gnu.org/gcc-7/changes.html

 

Necessitas uma versão moderna? >_< Prove primeiro com o comando setlocale(LC_ALL, "portuguese-brazilian"), pode que funcione. ;)

adicionado 3 minutos depois

Ja estão trabalhando atualmente na versão 8. Se é que não da tempo por uma, e ja tem outra. Não esquente a cabeça com isso, se você estiver estudando procure saber o padrão que você está aprendendo primeiro para saber se precisa buscar um compilador mais atualizado. Levo anos programando e apenas faço uso do padrão c++11. >_<

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

A ver, vamos passar a ação...
Clint1.jpg

 

Antes de ficar supondo coisas, e buscar "soluções inúteis", mande-me o seu código, e escreva exatamente o que você está esperando que seu programa faça. Capturas de tela, fragmentos de códigos, referencias a paginas que tiver, qualquer coisa.
Muitas vezes você acha que pode fazer uma coisa e está limitado por algum problema "invisível".
Mande uma foto do seu teclado se puder, idioma usado no sistema operativo etc etc.

Vamos ver se resolvemos ou não. Não instale nada mais no seu computador, primeiro vamos ver do que se trata. Aguardo resposta.

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

@TYSQUARE89 Quando eu coloquei setlocale dessa forma, todas as letras com acento ficaram com uns símbolos estranhos. Antes, com o (LC_ALL, "Portuguese"), apenas o Á , õ e ã ficaram com uns símbolos estranhos. Eu até tentei usar esse comando com %c no lugar no acento, usando a tabela ASCII:

printf(" *SISTEMA DE C%cLCULO DE CRÉDITOS", 193); 

Porém, fica com o mesmo símbolo se eu digitasse "Á" no lugar de "%c"

 

@vangodp Eu fiz um teste com acentos no programa:

printf(" Á À Ã Â É Ê Í Ì Ó Ò Õ Ô Ú Ù á à ã â é ê í ì ó ò õ ô ú ù");

Porém apareceu esses caracteres:

Erro.png

 

Eu estou usando o DevC++ 4.9.9.2, com o compilador TDM-GCC-64, meu teclado é em Português e estou usando o Windows 7 Home Premium também em português

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

Você usa Windows 7 Home Premium x32? Pois seu compilador é x64, não sei se interfere em char. Mas com certeza pode dar algum problema.

Como o @vangodp disse, antes de executar soluções drásticas, vamos as mais obvias, já tentou verificar se seu console está em UTF-8(ASCII não possui acentos)?

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

Creio que seja melhor instalar um editor mais avançado/atualizado, como o code::blocks. Pra verificar é preciso ir no regedit, mas não lembro o caminho certo. La é possível ativar UTF-8, assim é adicionado mais símbolos. Sim a versão extendida contém acentos, mas se não usar locale.h ou %c, 160... não é possível visualizar eles. Se você ir no cmd, você consegue digitar acentos, etc..?

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

@TYSQUARE89Nossa... Eu fui verificar no cmd, e percebi que tem alguns acentos que não aparecem, e outros aparecem normalmente. Mas eu lembro dele mostrar todos os acentos certinhos... Que estranho.

 

O que será que pode ter acontecido? Certeza que isso está relacionado com o programa

 

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!