Sofia-Fonseca Posted March 7, 2012 Report Share Posted March 7, 2012 Sou muito recente na programação e preciso saber como fazer para aparecerem os acentos e as cedilhas na consola depois do programa estar feito. Ex: printf("olá"); = na consola: olB <- como fazer aparecer "olá"? Desde já obrigada pela atenção. Link to comment Share on other sites More sharing options...
pmg Posted March 7, 2012 Report Share Posted March 7, 2012 Ui! Ponto importante: tens que ter a consola configurada para o mesmo "encoding" em que está o ficheiro c original. As strings em C, e os caracteres isolados, de tipo char (como "Olá") não estão preparados para essas modernices. Deves usar wchar_t ("wide char"). Em strings mete-lhe um L antes da primeira aspa #include <stdio.h> #include <wchar.h> wprintf(L"Olá\n"); Se quiseres ver os caracteres todos com "batota" e aproveitar as potencialidades do Comportamento Indefenido, podes fazer qualquer coisa #include <stdio.h> int main(void) { int j, k; for (j = 0; j < 256; j += 16) { for (k = 0; k < 16; k++) { printf("%d (0x%02X) ", j + k, j + k); putchar(j + k); puts(""); } puts("Press ENTER for next group"); getchar(); } return 0; } Com este programa descobri que o "á" tem o código 160 (A0 em hexadecimal) #include <stdio.h> int main(void) { printf("Ol\xA0, Mundo!\n"); return 0; } What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código! Link to comment Share on other sites More sharing options...
pmg Posted March 7, 2012 Report Share Posted March 7, 2012 Compara a codepage 437 com a codepage 1252 http://ascii-table.com/codepage.php?437 http://ascii-table.com/codepage.php?1252 Na 437 o 'á' está no código 160 (0xA0), na 1252 está no código 225 (0xE1); o caracter com código 225 na codepage 437 é o 'B' (beta) 😉 What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código! Link to comment Share on other sites More sharing options...
pmg Posted March 7, 2012 Report Share Posted March 7, 2012 No meu windows, posso alterar os caracteres mostrados com o comando chcp > chcp 437 Active code page: 437 >printchar 160 225 1: á 2: ß >chcp 1252 Active code page: 1252 >printchar 160 225 1: 2: á What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código! Link to comment Share on other sites More sharing options...
Sofia-Fonseca Posted March 7, 2012 Author Report Share Posted March 7, 2012 Ui! Ponto importante: tens que ter a consola configurada para o mesmo "encoding" em que está o ficheiro c original. As strings em C, e os caracteres isolados, de tipo char (como "Olá") não estão preparados para essas modernices. Deves usar wchar_t ("wide char"). Em strings mete-lhe um L antes da primeira aspa ... Ok! Entendi tudo. Mas mudei o código para um que aprendi (ainda) porque o teu não deixava a consola aberta... Fiz assim: #include <stdio.h> #include <conio.h> main() { printf("Ol\xA0, Mundo!\n"); getch(); } Compara a codepage 437 com a codepage 1252 ... Na 437 o 'á' está no código 160 (0xA0), na 1252 está no código 225 (0xE1); o caracter com código 225 na codepage 437 é o 'B' (beta) 😉 Como é que sabemos qual das duas tabelas devemos utilizar? No meu windows, posso alterar os caracteres mostrados com o comando chcp ... Isso refere-se ao DOS... Ainda só tive uma aula sobre o assunto ?. Muito obrigada pelas explicações! 😁 Edit: GeSHi adicionado (pmg) Link to comment Share on other sites More sharing options...
pmg Posted March 7, 2012 Report Share Posted March 7, 2012 Como é que sabemos qual das duas tabelas devemos utilizar? Pois ... não sei 😉 Experimenta as duas. Usa a que funcionar. Mas lembra-te que isto é "batota". Os caracteres a as strings "normais" em C não estão preparadas para lidarem bem com caracteres "esquisitos". A maneira correcta (e trabalhosa) de trabalhar com caracteres "esquisitos" é com "wide chars" e "wide strings" e configurar a consola para a fonte/encoding correcto. O unicode, e o encoding utf-8, dão trabalho mas permitem tudo isso e muito mais. What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código! Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now