Попробуйте часть кода до слова main заменить на #include "stdafx.h" //1 #include <iostream> //2 using namespace std; //3 |
Системные данные текстового типа
4.4. Вывод текстовых данных
При выводе текстовых данных особые проблемы возникают только в том случае, когда сообщения, содержащие русские буквы, готовятся в среде Windows (кодовая страница 1251), а выводятся консольным приложением в 866-й кодовой странице. В этом случае можно написать сравнительно несложную функцию конвертирования текстов из одной кодировки в другую. В кодовой странице 1251 буквы русского алфавита кодируются подряд, начиная с кода 192 (большая буква 'А' ) до кода 255 (малая буква 'я' ). Буквы 'Ё' и 'ё' имеют коды 164 и 184 соответственно. Поэтому при перекодировке необходимо:
- коды букв, принадлежащие интервалу [192, 239] уменьшить на 64, чтобы вогнать их в интервал [128, 174];
- коды букв, принадлежащие интервалу [240, 255] уменьшить на 16, чтобы вогнать их в интервал [224, 239];
- коды букв Ё и ё заменить на 240 и 241 соответственно.
#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(); } //=== Результат работы ===
В первой строке вывод реализован без перекодировки, а во второй – с перекодировкой.
4.4.1. Форматный вывод
Для форматного вывода символьных значений в функции 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
4.4.2. Потоковый вывод
В потоковом выводе единственная проблема может возникнуть в связи с перекодировкой русских сообщений в консольном приложении 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
4.4.3. Специальные функции вывода текстовой информации
К дополнительным средствам вывода следует отнести функцию puts ( str ), передающую строку str на стандартное устройство stdout, и вывод на дисплей с помощью функции cprintf. Обращение к последней не отличается от обращения к функции printf, но дисплей не допускает переназначения потока вывода. Кроме того, при выводе на дисплей имеется возможность окрасить текст в тот или иной цвет.