Ir ao conteúdo

Posts recomendados

Postado

Estou tentando digitar a palavra "carrão", porém não consigo imprimir com o til, mesmo já tendo colocado a biblioteca "locale.h".

Alguém sabe o por quê?

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

int main (){
    
setlocale(LC_ALL,"Portuguese");    
 char nome [20] ;


printf ("Digite o seu nome:\n");
scanf ("%19[^\n]s", nome);

    

printf("O nome digitado é: %s\n\n", nome);
    
  system("pause");
  return 0;    
    
    
}

 

  • Curtir 1
Postado
5 horas atrás, Eli Almeidaa disse:

Alguém sabe o por quê?

se você compilou e não funcionou o porque geralmente é o windows.

 

O locale e dependente do sistema e das configurações do sistema.

veja que linux ele vai funcionar, mas vai funcionar porque o linux esta configurado para utf-8 o terminal por padrão.

exemplo linux

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

#define TAMANHO_BUFFER 256

void
p_pausa(void)
{
    char buffer_entrada[TAMANHO_BUFFER];
    printf("Pressione enter para continuar.\n");
    fgets(buffer_entrada, TAMANHO_BUFFER-1, stdin);
}

int main(void)
{
    char buffer_entrada[TAMANHO_BUFFER];
    setlocale(LC_ALL, "");
    printf("Digite o seu nome:");
    fgets(buffer_entrada, TAMANHO_BUFFER-1, stdin);
    printf("O nome digitado é: %s\n", buffer_entrada);
    p_pausa();
    return(0);
}

 

  • Curtir 2
Postado

Essas coisas de acentos são um pesadelo.

 

Não dá pra saber como está rodando isso, sequer o sistema porque não disse.

O código oficial para portugues do brasil é pt_BR mas pode ser que outros funcionem.

 

Mas em Windows só isso não adianta. Se está rodando através do CMD no Windows deve confirmar a tal da página de código. Para o português deve usar 1252 ou alguma compatível. Ou 65001 para o conjunto mais amplo de letras.

Se está rodando no terminal do Windows (aquele que tem aceleração por hardware e você instala a partir da loja, pode nem precisar. Tudo depende também da configuração do Windows em termos de região.

 

Leia o manual. Está documentado aqui, em português, como esperado: https://learn.microsoft.com/pt-br/windows/console/console-code-pages

 

CHCP na linha de comando te diz a página de código em efeito. 850 é o padrão na minha máquina por exemplo, e não vai esses acentos.

 

CHCP 1252 muda para essa página 1252 e tem os acentos de português.

 

Mais ainda: tem o guia completo dessas coisas, em português, onde esperado: https://learn.microsoft.com/pt-br/windows/console/console-reference e seria bom dar uma olhada se vai continuar escrevendo programas para a console no Windows.

 

EXEMPLO

 

A maneira certa de fazer isso é salvar a página de código em uso, rodar seu programa e depois deixar tudo como achou. Evita aborrecimentos e preserva empregos.

 

#include<stdio.h>
#include <windows.h>
int main(void)
{
    const int pt_br = 1252;
    int res = 0;
    int antes= GetConsoleOutputCP();
    res = SetConsoleOutputCP(pt_br);
    if (res == 0)
    {
        printf("Deu erro ao tentar mudar pagina :(\n");
        return -1;
    }
    printf("\
    Página original era %d\n\
    Página agora é %d e tem os acentos. \"%s\"\n",
        antes, pt_br, "carrão");

    res = SetConsoleOutputCP(antes);
    if (res == 0)
    {
        printf("Deu erro ao tentar restaurar pagina :(\n");
        return -2;
    }
    printf("\
    Página (restaurada) agora é %d\n",antes);
    return 0;
}

 

Mesmo que não tenha lido a documentação que disse pra ler, dá pra imaginar que GetConsoleOutputCP() devolve a página em uso. E SetConsoleOutputCP() muda para outra e retorna 0 se deu erro.

 

SAÍDA DO EXEMPLO

 

    Página original era 850
    Página agora é 1252 e tem os acentos. "carrão"
    Pßgina (restaurada) agora Ú 850

 

 

 

 

  • Obrigado 1

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!