Ввод и вывод русских символов

При выводе на консоль русские символы могут отображаться некорректно. Попробуйте запустить следующий пример:

cout<<"Столовая наполнилась неприятным"<<endl;

cout<<"синим сигарным дымом.

Пес дремал,"<<endl;

cout<<"уложив голову на передние лапы"<<endl;

Если текст на экране отобразился нормально, то дальше можно не читать, однако, если вы увидели нечто подобное:

ввод и вывод русских символов - student2.ru

то вам следует изучить данный раздел, чтобы научиться отображать русские символы корректно.

Первый, наиболее простой способ, заключается в использовании так называемого транслита. В этом случае можно заменять русские буквы английскими подобно тому, как часто пишут в СМС. Например, вместо фразы «Столовая наполнилась дымом» можно написать «Stolovaya napolnilas’ dymom». Однако подобный способ – это насилие над русским языком, поэтому намного лучше – научиться работать с русскими буквами.

Для корректного отображения русских символов попробуйте добавить в программу следующее:

#include <iostream>

using namespace std;

#include <locale.h>

int main() {

setlocale(LC_ALL, "Russian");

cout<<"Столовая наполнилась неприятным"<<endl;

cout<<"синим сигарным дымом.

Пес дремал,"<<endl;

cout<<"уложив голову на передние лапы"<<endl; return 0;

}

После этого текст должен отобразиться так, как требуется:

ввод и вывод русских символов - student2.ru

Однако это еще не все. Рассмотрим пример:

setlocale(LC_ALL, "Russian");

char name[20];

cout << "Введите свое имя:";

cin >> name;

cout << "Ваше имя:";

cout << name << endl;

Введенное имя выведется некорректно:

ввод и вывод русских символов - student2.ru

Для устранения проблемы можно использовать второй способ:

#include <iostream>

using namespace std;

#include <windows.h>

int main() {

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

char name[20];

char name[20];

cout << "Введите свое имя:";

cin >> name;

cout << "Ваше имя:";

cout << name << endl;

return 0;

}

ввод и вывод русских символов - student2.ru

Кроме того, нужно сменить шрифт консоли. Щелкните правой клавишей мыши на шапку консоли и выберите Свойства. Выберите вкладку Шрифт и установите Lucida Console.

ввод и вывод русских символов - student2.ru ввод и вывод русских символов - student2.ru

Примеры решения задач

Задача 1.Подоходный налог в России составляет 13%. Напишите программу, которая принимает доход гражданина в рублях и вычисляет фактическую денежную сумму, которую он получит на руки.

//Если работаем в Visual Studio, то

//добавляем эту строку

#include "stdafx.h"

//… для cout и cin

#include <iostream>

using namespace std;

//… для setlocale()

#include <locale.h>

int main() {

//Корректно отображаем русские сивмолы

setlocale(LC_ALL, "Russian");

//Объявляем переменную для дохода

float income;

//Просим пользователя ввести доход

cout << "Введите свой доход:" << endl;

//Вводим расстояние

cin >> income;

//Вычисляем реальный доход (-13%)

float real_income = income*0.87;

//Выводим результат на экран

cout << "Ваш фактический доход составляет "

<< real_income << "рублей" << endl;

system("pause");

return 0;

}

Задача 2.Расстояние от Земли до Солнца составляет 150 000 000 км. Скорость света равна 300 000 км/сек. Напишите программу, которая вычисляет, за какое время свет, стартовавший с Солнца, достигнет поверхности Земли.

#include "stdafx.h"

#include <iostream>

using namespace std;

#include <locale.h>

int main() {

setlocale(LC_ALL, "Russian");

//Скорость света (км/сек)

float light_speed = 300000;

//Расстояние от Солнца до Земли (км)

float distance = 150000000;

//Время в секундах

float time_sec = distance/light_speed;

//Время в минутах

float time_min = time_sec/60;

//Выводим результат на экран

cout << "Свет достигнет Земли за " <<

time_sec << " секунд ";

cout<< "или за " << time_min << " минут." <<

endl;

system("pause");

return 0;

}

Задача 3.Напишите программу, которая принимает трёхзначное число и вычисляет сумму его цифр.

#include "stdafx.h"

#include <iostream>

using namespace std;

#include <locale.h>

int main() {

setlocale(LC_ALL, "Russian");

//Шестизначное число

int number;

cout << "Введите трёхзначное число:" << endl;

cin >> number;

//Вычленяем три его цифры

int d1 = (number/100)%10;

int d2 = (number/10)%10;

int d3 = number%10;

//Выводим результат

cout << "Сумма цифр числа " << number;

cout << " равна " << (d1+d2+d3) << endl;

system("pause");

return 0;

}

Задача 4.Напишите программу, которая выводит на экран цифру 8 из звёздочек.

#include "stdafx.h"

#include <iostream>

using namespace std;

int main() {

cout << "***" << endl << "* *" << endl;

cout << "***" << endl << "* *" << endl;

cout << "***" << endl;

system("pause");

return 0;

}

Задача 5.Напишите программу, которая принимает фамилию, имя и отчество человека, а затем выводит его полное имя.

#include "stdafx.h"

#include <iostream>

using namespace std;

#include <windows.h>

int main() {

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

char first_name[100];

char surname[100];

char patronymic[100];

cout << "Введите Вашу фамилию: ";

cin >> surname;

cout << "Введите Ваше имя: ";

cin >> first_name;

cout << "Введите Ваше отчество: ";

cin >> patronymic;

cout << "Ваше полное имя:" << endl;

cout << surname << " " << first_name

<< " " << patronymic << endl;

system("pause");

return 0;

}

КОНТРОЛЬНЫЕ ВОПРОСЫ

1. Опишите структуру программы на языке Си.

2. Какая директива подключает библиотеку?

3. Какую библиотеку нужно подключить для работы с операторами cout и cin?

4. Что такое комментарий? Какие типы комментариев существуют в языке Си? Как выделить комментарий?

5. Перечислите известные вам типы данных, которые есть в языке Си. Какой размер в памяти занимают переменные этих типов? Какие значения они могут принимать?

6. Объясните, чем отличаются ключевые слова от идентификаторов? Какие правила нужно соблюдать при создании имен переменных? Приведите примеры корректных и некорректных идентификаторов.

7. Объясните, как работает операторы cout и cin. Приведите примеры. Зачем нужна команда endl?

8. Какие основные арифметические операторы существуют в языке Си?

9. Как выполнить деление нацело и вычислить остаток от деления?

10. Объясните, в чём заключается различие между кавычками и апострофами при работе с символами и строками. Приведите примеры.

11. Как сделать так, чтобы русские символы отображались корректно?

12. Какую библиотеку нужно подключить для работы с функцией setlocale()?

13. Какая библиотека требуется для работы с функциями SetConsoleCP() и SetConsoleOutputCP()?

14. Какой из значков << или >> используется в операторе cout (cin)?

15. Какие значки используются в Си в качестве аналогов для begin и end в Паскале?

Наши рекомендации