Неверная кодировка текста - C (СИ)
Формулировка задачи:
Уверен, что эта тему уже поднималась ранее.
Собственно переписываю прогу с С++ на Си, и тут столкнулся с абракадаброй в сообщениях пользователю. В С++ обходил
В Си не проканало естественно. Думал управится с
но компилятор в шоке и начинает ругаться.
Как я понял он видит в Она же выполнена в С++, только еще и зациклена с помощью while и выходом из него.
Надеюсь на вашу критику по поводу оформления программ и поста.
З.Ы. Юзал поиск по названию своей темы, но увы...
setlocale (LC_ALL, "Rissian_Russia.1251");
using std::setlocale (LC_ALL, "Rissian_Russia.1251");
setlocale
функцию и ожидает, что с ним работает опытный юзер и щас все исправит, но поскольку сам таким не являюсь прошу помощи у вас: 1. Откуда появилась setlocale и с чем можно его использовать еще. 2. Можно ли попробовать запустить setlocale через пространство имен? 3. Какая есть альтернатива в Си этой setlocale. (включение русского шрифта) Сама программа. Вот только без понятия: рабочая она или нет, т.к. застрял на абракадабре.#include <stdio.h>
#include <conio.h>
#include <math.h>
int main ()
{
using std::setlocale (LC_ALL, "Rissian_Russia.1251");
int upr; // переменный для управления switch
double aT,bT,cT,sT, pT,ppT; // для расчетов с треугольником
printf("\nВведите соответствующие условное обозначение ");
printf("\nдля перехода к нужным Вам вычислениям ");
printf( "\n\n 1 - треугольник\t 2 - прямоугольник\n");
printf(" 3 - круг\t \t4 - трапеция\n\n ");
printf ("Для выхода из программы введите -1 \n ");
scanf ("%f",&upr);
switch (upr)
{
case 1:
{
printf("Вы выбрали функцию расчета площади треугольника!\n");
printf("Введите 3 стороны треугольника:");
printf ("\n a:");
scanf ("%f",&aT);
printf("\nb: ");
scanf ("%f",&bT);
printf ("\nc: ");
scanf ("%f",&cT);
pT=aT+bT+cT;
ppT=pT/2;
sT=sqrt(ppT*(ppT-aT)*(ppT-bT)*(ppT-cT));
printf ("Периметр равен: %.2\n",pT) ;
printf ("Площадь треугольника: %.2\n",sT);
break;
}
case 2:
{
printf ("Вы выбрали функцию расчета площади прямоугольника!\n ");
printf("Введи значение сторон a , b\n");
double aP,bP;
scanf ("%f",&aP);
scanf ("%f",&bP);
double SP=aP*bP;
printf("Площадь прямоугольника: %.2\n",SP);
}
break;
case 3:
{
printf(" Вы выбрали функцию для расчета площади круга!");
printf ("Введите значение радиуса: ");
double R, SO;
scanf ("%f",&R);
SO=3.14*pow(R,2);
printf ("Площадь круга: %.4\n",SO);
}
break;
case 4:
{
double aU,bU,hU, SU;
printf("Вы выбрали функцию расчета площади трапеции!\n");
printf("Введите значение сторон a , b и высота h соответственно: ");
scanf ("%f",&aU);
scanf ("%f",&bU);
scanf ("%f",&hU);
SU=((aU+bU)/2)*hU;
printf(" Площадь трапеции: %.4\n ",SU);
break;
}
default: printf("Вы ввели неверное значение\n\n");
} // закрытие тела switch
return 0;
} // закрытие главной функции// .С++
#include <iostream.h>
#include <math.h>
int main ()
{setlocale (LC_ALL, "Russian_Russia.1251");
int upr; // переменный для управления switch
double aT,bT,cT,sT, pT,ppT; // для расчетов с треугольником
while (true)
{
cout<< ("\nВведите соответствующие условное обозначение ")
<< ("\nдля перехода к нужным Вам вычислениям ")
<<( "\n\n 1 - треугольник\t 2 - прямоугольник\n")
<<(" 3 - круг\t \t4 - трапеция\n\n ")
<< "Для выхода из программы введите -1 "<<endl;
cin>> upr;
if(upr != -1)
{
switch (upr)
{
case 1:
{
cout<<("Вы выбрали функцию расчета площади треугольника!\n")
<<("Введите 3 стороны треугольника:")
<< "\n a:";
cin>> aT;
cout <<("\nb: ");
cin>> bT;
cout<< "\nc: ";
cin>> cT;
pT=aT+bT+cT;
ppT=pT/2;
sT=sqrt(ppT*(ppT-aT)*(ppT-bT)*(ppT-cT));
cout<< ("Периметр равен: ")<< pT << (" Площадь треугольника: ")<< sT<< endl;
break;
}
case 2:
{
cout<< "Вы выбрали функцию расчета площади прямоугольника! "
<< "Введи значение сторон a , b"<<endl;
double aP,bP; cin>>aP>>bP;
double SP=aP*bP;
cout<< "Площадь прямоугольника: "<< SP<< endl;
}
break;
case 3:
{
cout<< " Вы выбрали функцию для расчета площади круга!"
<<"Введите значение радиуса: ";
double R, SO; cin>>R;
SO=3.14*pow(R,2);
cout<< "Площадь круга: "<< SO<<endl;
}
break;
case 4:
{
double aU,bU,hU,SU;
cout<< "Вы выбрали функцию расчета площади трапеции!"<<endl
<< "Введите значение сторон a , b и высота h соответственно: ";
cin>> aU
>>bU
>> hU;
SU=((aU+bU)/2)*hU;
cout<< " Площадь трапеции: "<< SU<< endl;
break;
}
default: cout<< "Вы ввели неверное значение\n"<< endl;
} // закрытие тела switch
} // закрытие оператора if при положительных результатах
else
{ // Открыт else
cout<<" Программа завершена."<<endl;
break;
} // закрыите значение else
} // закрытие цикла WHILE
return 0;
} // закрытие главной функцииРешение задачи: «Неверная кодировка текста»
textual
Листинг программы
#include <locale.h>
int main(){
setlocale(LC_ALL, "rus");
.....
}
Объяснение кода листинга программы
- #include
Включает в программу библиотеку, которая содержит функции для работы с локалью. - int main(){ Функция main() является точкой входа в программу.
- setlocale(LC_ALL,
rus); Устанавливает локаль для работы с русским языком. - ..... Замените многоточие на код, который Вы не предоставили.