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

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

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

Если оттранслировать и запустить следующий текст, то на экране корректно будет читаться только английская часть текста.

#include "stdafx.h"

#include <iostream> // библиотека ввода-вывода С++

using namespace std;

void main()

{ int i;

cout<<("Русский текст\nEnglish text\n"); //вывод текста на экран

cin>>i; // ввод числа с клавиатуры

}

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

ПЕРЕД ЗАПУСКОМ СЛЕДУЮЩЕЙ ПРОГРАММЫ СКОПИРУЙТЕ ФАЙЛ cyrToDos.h В ПАПКУ С ВАШИМ ПРОЕКТОМ. Файл cyrToDos.h находится в папке с лабораторными работами.

#include "stdafx.h"

#include <iostream>

#include "cyrToDos.h"

using namespace std;

void main()

{ int i;

cout<<cyrToDos("Русский текст\nEnglish text\n");

cin>>i;

}

Эта версия программы корректно напечатает обе части текста.

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

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

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

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

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

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

#include "stdafx.h"

#include <iostream>

#include "cyrToDos.h"

using namespace std;

void main()

{

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

cout<<cyrToDos("\nВычисление частного\n*******************\n");

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

cout<<"-> ";

cin>>a>>b;

if (b != 0) {

c=a/b;

cout<<cyrToDos("частное от деления ")<<a;

cout<<cyrToDos(" на ")<<b;

cout<<cyrToDos("равно ")<<c<<endl;

}

else {

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

}

cin>>a;

}

Пример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() специально предназначена для вывода строк и не требует никакой дополнительной информации.

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