Нижегородский государственный университет им. Н.И.Лобачевского
Опубликован: 25.11.2008 | Доступ: свободный | Студентов: 9592 / 1296 | Оценка: 4.06 / 3.66 | Длительность: 21:16:00
Лекция 5:

Системные данные текстового типа

< Лекция 4 || Лекция 5: 12345 || Лекция 6 >

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, но дисплей не допускает переназначения потока вывода. Кроме того, при выводе на дисплей имеется возможность окрасить текст в тот или иной цвет.

< Лекция 4 || Лекция 5: 12345 || Лекция 6 >
Alexey Ku
Alexey Ku

Попробуйте часть кода до слова main заменить на 

#include "stdafx.h" //1

#include <iostream> //2
#include <conio.h>

using namespace std; //3

Александр Талеев
Александр Талеев

#include <iostream.h>
#include <conio.h>
int main(void)
{
int a,b,max;
cout << "a=5";
cin >> a;
cout <<"b=3";
cin >> b;
if(a>b) max=a;
else max=b;
cout <<" max="<<max;
getch();
return 0;
}

при запуске в visual express выдает ошибки 

Ошибка    1    error C1083: Не удается открыть файл включение: iostream.h: No such file or directory    c:\users\саня\documents\visual studio 2012\projects\проект3\проект3\исходный код.cpp    1    1    Проект3

    2    IntelliSense: не удается открыть источник файл "iostream.h"    c:\Users\Саня\Documents\Visual Studio 2012\Projects\Проект3\Проект3\Исходный код.cpp    1    1    Проект3

    3    IntelliSense: идентификатор "cout" не определен    c:\Users\Саня\Documents\Visual Studio 2012\Projects\Проект3\Проект3\Исходный код.cpp    6    1    Проект3

    4    IntelliSense: идентификатор "cin" не определен    c:\Users\Саня\Documents\Visual Studio 2012\Projects\Проект3\Проект3\Исходный код.cpp    7    1    Проект3

при создании файла я выбрал пустой проект. Может нужно было выбрать консольное приложение?