При выводе текстовых данных особые проблемы возникают только в том случае, когда сообщения, содержащие русские буквы, готовятся в среде Windows (кодовая страница 1251), а выводятся консольным приложением в 866-й кодовой странице. В этом случае можно написать сравнительно несложную функцию конвертирования текстов из одной кодировки в другую. В кодовой странице 1251 буквы русского алфавита кодируются подряд, начиная с кода 192 (большая буква 'А' ) до кода 255 (малая буква 'я' ). Буквы 'Ё' и 'ё' имеют коды 164 и 184 соответственно. Поэтому при перекодировке необходимо:
#include <stdio.h> #include <iostream.h> #include <conio.h> #include <string.h> char *to_866(unsigned char *s) { static unsigned char str[80]; int j=0; while (s[j]!='\0') { str[j]=s[j]; if(s[j]>=192 && s[j]<=239) str[j]-=64; if(s[j]>=240 && s[j]<=255) str[j]-=16; if(s[j]==164) str[j]=240; if(s[j]==184) str[j]=241; j++; } str[j]='\0'; return str; } void main() { char s[]="Привет"; cout << s << endl; cout <<to_866(s) << endl; getch(); } //=== Результат работы ===
В первой строке вывод реализован без перекодировки, а во второй – с перекодировкой.
Для форматного вывода символьных значений в функции printf используется форматный указатель %c, а для вывода строк – форматный указатель %s. При создании консольных приложений Windows можно воспользоваться программой перекодировки, аналогичной функции to_866.
#include <stdio.h> #include <conio.h> void main() { char ch1='F'; unsigned char ch2='5'; char ch3[]="ABCD"; printf("%c %c %s",ch1,ch2,ch3); getch(); } //=== Результат работы === F 5 ABCD
В потоковом выводе единственная проблема может возникнуть в связи с перекодировкой русских сообщений в консольном приложении Windows.
#include <iostream.h> #include <conio.h> void main() { char ch1='F'; unsigned char ch2='5'; char ch3[]="ABCD"; cout<<ch1<<' '<<ch2<<' '<<ch3; getch(); } //=== Результат работы === F 5 ABCD
К дополнительным средствам вывода следует отнести функцию puts ( str ), передающую строку str на стандартное устройство stdout, и вывод на дисплей с помощью функции cprintf. Обращение к последней не отличается от обращения к функции printf, но дисплей не допускает переназначения потока вывода. Кроме того, при выводе на дисплей имеется возможность окрасить текст в тот или иной цвет.