|
Попробуйте часть кода до слова 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 ABCD4.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 ABCD4.4.3. Специальные функции вывода текстовой информации
К дополнительным средствам вывода следует отнести функцию puts ( str ), передающую строку str на стандартное устройство stdout, и вывод на дисплей с помощью функции cprintf. Обращение к последней не отличается от обращения к функции printf, но дисплей не допускает переназначения потока вывода. Кроме того, при выводе на дисплей имеется возможность окрасить текст в тот или иной цвет.
