2013-03-04 1 views
2

Как назначить символы, отличные от ASCII, широкому символу и распечатать его на консоли? Этот код вниз не работает:Назначение символов, отличных от ASCII, широкому символу и печать с помощью printf

#include <stdio.h> 
int main(void) 
{ 
    wchar_t wc = L'ć'; 
    printf("%lc\n", wc); 
    printf("%ld\n", wc); 
    return 0; 
} 

Выход:

263 
Press [Enter] to close the terminal ... 

Я использую MinGW GCC на Windows 7.

+2

вы не назначая его на гольца, вы присваиваете его к wchar_t – Mike

+1

[ 'wchar_t' не ASCII.] (Http://en.wikipedia.org/wiki/Wide_character) – m0skit0

+0

как assignt символ 'ć' для любого символа char, int, variable и напечатать его правильно? Это вообще возможно? – balky

ответ

1

Я думаю, что ваши звонки printf() неудачу с ошибкой «Нелегальная последовательность байт» возвращаемой в errno, по крайней мере, это то, что происходит здесь, на MacOS X с приведенном выше примере кода (а также при использовании wprintf() вместо printf()). Для меня это работает, когда я называю setlocale(LC_ALL, ""); перед вызовом printf() так, что он прекращает с помощью C локали по умолчанию:

#include <stdio.h> 
#include <stdlib.h> 
#include <locale.h> 
int main(void) 
{ 
    wchar_t wc = L'ć'; 

    setlocale(LC_ALL, ""); 
    printf("%lc\n", wc); 

    return 0; 
} 

Неясно, что платформа/составитель вы на, так YMMV.

+0

Я также работаю над окнами – balky

+0

MinGW GCC на Windows 7 – balky

2

Вы должны использовать wprintf для печати строки широких символов:

wprintf(L"%c\n", wc); 
+0

Хорошо, но он все еще не печатает никаких символов – balky

+0

@balky - тогда консоль, которую вы используете, не отображает широкие символы правильно – Mike

+0

Вы имеете в виду окно консоли Windows? Я не получаю это – balky

0

использование wprintf ("% lc \ n", wc); и вы получите ваш желаемый результат

+0

, который не работает – balky

+0

какой результат вы действительно хотите? –