Неверная кодировка текста - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Уверен, что эта тему уже поднималась ранее. Собственно переписываю прогу с С++ на Си, и тут столкнулся с абракадаброй в сообщениях пользователю. В С++ обходил
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;  
}            // закрытие главной функции
Она же выполнена в С++, только еще и зациклена с помощью while и выходом из него.
// .С++
#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");
.....
}

Объяснение кода листинга программы

  1. #include Включает в программу библиотеку, которая содержит функции для работы с локалью.
  2. int main(){ Функция main() является точкой входа в программу.
  3. setlocale(LC_ALL, rus); Устанавливает локаль для работы с русским языком.
  4. ..... Замените многоточие на код, который Вы не предоставили.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.556 из 5
Похожие ответы