Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб2.doc
Скачиваний:
7
Добавлен:
17.08.2019
Размер:
305.15 Кб
Скачать

Проблема русификации текстов.

При программировании на языке С часто возникают сложности с выводом русских текстов на экран дисплея.

Если оттранслировать и запустить следующий текст :

#include <stdio.h>

void main()

{ printf("Русский текст\nEnglish text\n");

}

то на экране будет читаться только английская часть текста, русская же часть напечатается в измененном, неудобочитаемом виде. Это связано с тем, что очень часто в средах программирования отсутствуют необходимые русификаторы текста, вызывающиеся автоматически. Если такая проблема существует в Вашей среде программирования, её необходимо решить самому программисту, включив в текст программы необходимые изменения.

#include <windows.h>

#include <stdio.h>

void main()

{

char msg[80]; //буферная строка для русификации

CharToOem("Русский текст\nEnglish text\n", msg);

printf(msg);

}

Эта версия программы корректно напечатает обе части текста. Функция CharToOem() из библиотеки windows.h, русифицирует исходный текст, находящийся в первом параметре и результат помещает во второй параметр.

В нашем примере в программу введен специальный символьный массив длинной 80 символов для хранения результата русификации. Перед печатью строка текста обрабатывается функцией CharToOem(), результат помещается в массив msg, который затем выводится на экран.

В заключении, вспомним символы форматов функции printf() :

%s - печать текстовой строки

%c - печать отдельного символа

%d - печать целого число

%e,%l - печать вещественного число

Примеры программирования.

Пример 1. Написать программу, которая вычисляет частное двух чисел. Программа должна проверять правильность введенных пользователем данных и, если они неверные (делитель равен нулю), выдавать сообщение об ошибке.

Вид экрана во время выполнения программы (данные, введенные пользователем, выделены жирным шрифтом):

Вычисление частного.

********************

Введите в одной строке делимое и делитель, затем нажмите <Enter>. > 12 0 Вы ошиблись! Делитель не должен быть равен нулю.

#include <stdio.h>

#include <windows.h>

void main() {

float a,b,c; // делимое, делитель и частное

char msg[80]; //буферная строка для русификации

CharToOem("\nВычисление частного\n*******************\n", msg);

printf(msg);

CharToOem("Введите в одной строке делимое и делитель, затем нажмите <Enter>\n ", msg);

printf(msg);

printf("-> ");

scanf("%f%f", &a, &b);

if (b != 0) {

c=a/b;

CharToOem("частное от деления %5.2f на %5.2f ",msg);

printf(msg, a, b);

CharToOem("равно %5.2f\n",msg);

printf(msg, c);

}

else {

CharToOem("Ошибка! Делитель не должен быть равен нулю!\n",msg);

printf(msg);

CharToOem("\nДля завершения нажмите <Enter> ",msg);

printf(msg);

}

}

Пример2. Написать программу вычисления площади кольца. Программа должна проверять правильность исходных данных. Вид экрана во время выполнения программы (данные, введенные пользователем, выделены жирным шрифтом).

+++++++++++++++++++++++

Вычисление площади кольца.

+++++++++++++++++++++++

Введите исходные данные: Радиус кольца (см) : 5.3 Радиус отверстия (см) : 2.1

= = = = = = = = = = = = = = = =

Результат вычисления.

Площадь кольца : 20.10 кв.см.

При ошибке выводить сообщение :

Ошибка! Радиус отверстия не может быть больше радиуса кольца.

// Вычисление площади кольца

#include <stdio.h>

#include <conio.h>

#include <windows.h>

void main() {

char msg[80]; //буферная строка для русификации

float rl,r2; // радиус кольца и отверстия

float s; // площадь кольца

CharToOem("++++++++++++++++++++++++++\nВычисление площади кольца\n++++++++++++++++++++++++++",msg);

printf(msg);

CharToOem("\nВведите исходные данные:\n",msg);

printf(msg);

CharToOem("радиус кольца (см)\t: ",msg);

printf(msg);

scanf("%f",&rl);

CharToOem("радиус отверстия (см)\t: ",msg);

printf(msg);

scanf("%f",&r2);

if (rl > r2) {

s = 2 * 3.14 * (rl - r2) ;

CharToOem("\n================================\n",msg);

printf(msg, s);

CharToOem("Площадь кольца : %6.2f кв.см\n",msg);

printf(msg, s);

}

else {

CharToOem("\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n",msg);

printf(msg, s);

CharToOem("Ошибка! Радиус отверстия не может быть больше радиуса кольца.\n",msg);

printf(msg);

}

CharToOem("\nДля завершения нажмите <Enter>",msg);

printf(msg);

}

Пример3. Напишите программу, которая запрашивает у пользователя номер дня недели, затем выводит название дня недели или сообщение об ошибке, если введены неверные данные.

// Выводит название дня недели

#include <stdio.h>

#include <windows.h>

void main() {

char msg[80]; //буферная строка для русификации

int nd; // номер дня недели

CharToOem("\nОпределение названия дня недели\n________________________________",msg);

puts(msg);

CharToOem("\nВведите номер дня недели (1..7)",msg);

puts(msg);

printf("->");

scanf("%i", &nd) ;

switch (nd) {

case 1: CharToOem("Понедельник",msg);

puts ( msg);

break;

case 2: CharToOem("Вторник",msg);

puts ( msg );

break;

case 3: CharToOem("Среда",msg);

puts ( msg);

break;

case 4: CharToOem("Четверг",msg);

puts ( msg);

break;

case 5: CharToOem("Пятница",msg);

puts ( msg);

break;

case 6: CharToOem("Суббота",msg);

puts ( msg);

break;

case 7: CharToOem("Воскресенье",msg);

puts (msg);

break;

default:CharToOem("Число должно быть в диапазоне 1..7",msg);

puts(msg);

}

}

В данном примере для вывода строки текста на экран применена функция puts() из библиотеки stdio.h В отличие от функции printf(), которая может выводить любой тип данных и, поэтому, требует указывать формат вывода, функция puts() специально предназначена для вывода строк и не требует никакой дополнительной информации.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]