Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
1 / 1 / 0
Регистрация: 28.02.2013
Сообщений: 62
1

Неверная кодировка текста

28.03.2013, 16:36. Показов 1275. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Уверен, что эта тему уже поднималась ранее.
Собственно переписываю прогу с С++ на Си, и тут столкнулся с абракадаброй в сообщениях пользователю. В С++ обходил
C++
1
setlocale (LC_ALL, "Rissian_Russia.1251");
В Си не проканало естественно. Думал управится с
C#
1
using std::setlocale (LC_ALL, "Rissian_Russia.1251");
но компилятор в шоке и начинает ругаться.
Как я понял он видит в setlocale функцию и ожидает, что с ним работает опытный юзер и щас все исправит, но поскольку сам таким не являюсь прошу помощи у вас:
1. Откуда появилась setlocale и с чем можно его использовать еще.
2. Можно ли попробовать запустить setlocale через пространство имен?
3. Какая есть альтернатива в Си этой setlocale. (включение русского шрифта)

Сама программа. Вот только без понятия: рабочая она или нет, т.к. застрял на абракадабре.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#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 и выходом из него.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
// .С++
#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;  
}            // закрытие главной функции
Надеюсь на вашу критику по поводу оформления программ и поста.
З.Ы. Юзал поиск по названию своей темы, но увы...
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.03.2013, 16:36
Ответы с готовыми решениями:

Неверная кодировка в выдаче переменных
Здравствуйте! У меня такая проблема - когда ввожу данные для заполнения таблицы, в самой таблице...

Неверная кодировка при работе с кириллицей
Вводится строка и каждый 2й '!' меняется на '$'. При вводе русских букв вместо их печатаются...

Неверная кодировка при создании файла
Добрый день! я через fprintf заношу в файл данные fprintf(fp, &quot;Имя: %s\n&quot;,p-&gt;name); однако...

Неверная кодировка при сохранении данных в файл
Здравствуйте, подскажите пожалуйста, где в функциях save() и openf() может крыться ошибка? Задание...

5
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12830 / 7567 / 1764
Регистрация: 25.07.2009
Сообщений: 13,959
28.03.2013, 16:45 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Цитата Сообщение от GraBLYA Посмотреть сообщение
Уверен, что эта тему уже поднималась ранее.
Русские шрифты в консоли
Не смотря на название раздела, там и на С примеров много...
0
118 / 110 / 78
Регистрация: 30.01.2013
Сообщений: 297
28.03.2013, 18:10 3
я использую

C
1
2
3
4
5
#include <locale.h>
int main(){
setlocale(LC_ALL, "rus");
.....
}
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12830 / 7567 / 1764
Регистрация: 25.07.2009
Сообщений: 13,959
28.03.2013, 18:17 4
ZeR_0, это только в мелкостудии работает. MinGW всё равно иероглифы выдаёт.
0
1 / 1 / 0
Регистрация: 28.02.2013
Сообщений: 62
28.03.2013, 18:19  [ТС] 5
Цитата Сообщение от ZeR_0 Посмотреть сообщение
я использую

C
1
2
3
4
5
#include <locale.h>
int main(){
setlocale(LC_ALL, "rus");
.....
}
Спасибо! Просто и практично )
Цитата Сообщение от easybudda Посмотреть сообщение
ZeR_0, это только в мелкостудии работает. MinGW всё равно иероглифы выдаёт.
С-Free 5.0 полёт нормальный.
Чем отличается "мелкостудии" от более крупных как MinGW??
0
118 / 110 / 78
Регистрация: 30.01.2013
Сообщений: 297
28.03.2013, 18:26 6
Цитата Сообщение от easybudda Посмотреть сообщение
ZeR_0, это только в мелкостудии работает. MinGW всё равно иероглифы выдаёт.
Ну мне в "мелкостудии" хватает)) В Dev C++ тоже работает.
1
28.03.2013, 18:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.03.2013, 18:26
Помогаю со студенческими работами здесь

Неверная кодировка текста
Получаю сообщение с сайта. Оно в кракозяблах Умный декодер подсказывает, что он в 1251...

Неверная кодировка текста
Доброго дня! Сделал вывод русского текста из таблицы phpmyadmin, но на выходе получились знаки...

Неверная кодировка при отображении текста в магазине приложений
Вообщем вот:

Неверная кодировка текста при выводе из файла на страницу
Здравствуйте.Столкнулся с проблемой кодировки текста загруженного из текстового файла на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru