Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 30, средняя оценка - 4.87
fors-dnet
3 / 3 / 0
Регистрация: 11.12.2011
Сообщений: 88
#1

Почему когда в рабочую программу вставляю setlocale(LC_ALL, "Rus"); она перестает корректно работать - C++

03.02.2012, 00:19. Просмотров 4252. Ответов 3
Метки нет (Все метки)

Программа сначала считывает данные с файла, потом сортирует их и сохраняет. Мне нужно было сделать меню на русском, но после добавления строчки сетлокал программа перестает корректно считывать дынные из файла. Вот код программы, помогите, в чём ошибка, если сетлокал убрать и оставить на англ всё норм работает. Всё это находится в функции гет:
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#include<iostream>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
 
class Abonent
{
private:   
        char nomer[11];
        double ostatok;
        char tarif[15];
public:
        int load (Abonent *arr);
        int sortost (Abonent *t);
        int sorttar ( Abonent *arr);
        int save ( Abonent *arr);
        void get(void);
 
 
}arr [5];
 int Abonent:: load (Abonent *arr)
 {
        int i=0;
        FILE *f=NULL; 
        f=fopen("D:\Input.txt", "rt");
        if (f==NULL)
        {
                std::cout<< "No file!!!\n";
                exit (0);
        }
        
        for(i=0;i<5;i++)
        {
                fscanf(f,"%s", &arr[i].nomer);
                fscanf(f,"%lf", &arr[i].ostatok);
                fscanf(f,"%s", &arr[i].tarif);
        }
        fclose (f);
 
        return 0;
 }
 
 
 
 int Abonent:: sortost (class Abonent *t)
 {
        class Abonent x;
        int i=0, j=0;   
        for(i=0;i<5;i++)
        {
                for(j=0; j<4; j++)
                {
                        if( t[j].ostatok > t[j+1].ostatok )
                        {
                                x=t[j];
                                t[j]=t[j+1];
                                t[j+1]=x;
                        }
                        
                }
        }
 
        return 0;       
 }
 int Abonent:: sorttar (class Abonent *arr)
 {
        int i=0, j=0;
        struct Abonent temp;
        for (i=0; i<5; i++)
        {
                for (j=0; j<4; j++)
                {
                        if (strcmp(arr[j].tarif, arr [j+1].tarif) >= 0)
                        {
                                temp=arr[j];
                                arr[j]=arr[j+1];
                                arr[j+1]=temp;
                        }
                }
        }
 
        return 0;
 
        return 0;
 }
 
int Abonent:: save (class Abonent *arr)
{
        int i=0;
        FILE *f=NULL;
        f=fopen ("D:\Result.txt", "wt");
        if (f==NULL)
        {
                std::cout<<"No file!!!\n";
                exit (0);
        }
   
        fprintf (f, "Spisok abonentov:\n\n");
        for(i=0;i<5;i++)
        {
                
                fprintf(f,"%s\t", arr[i].nomer);
                fprintf(f,"%lf\t", arr[i].ostatok);
                fprintf(f,"%s\t", arr[i].tarif);
                fprintf(f,"\n");
        }
        fclose (f);
 
        return 0;
}
 void Abonent:: get(void)
 {
        setlocale(LC_ALL, "Rus");
        int n=0, i=0;
          while(1)
          {
           std::cout<<"1.load\n2.sortorovka po osratky\n3.sortirovka po tarify\n4.save\n5.exit\n\n";
           std::cout<<"Input number : ";
           std::cin>>n;
           std::cout<<std::endl;
 
        switch (n)
        {
        case 1 : load(arr);
                         break;
 
        case 2 : sortost (arr);
                     break;
 
        case 3 : sorttar (arr);
                     break;
 
        case 4 : save (arr);
                     break;
 
        case 5 : exit (0);
                     break;
        }
        for (i=0;i<5;i++)
                std::cout<<arr[i].nomer<<'\t'<<arr[i].ostatok<<'\t'<<arr[i].tarif<<std::endl;
        std::cout<<std::endl;
        } 
 }
void main (void)
{
       class Abonent Abonent_val;
       Abonent_val.get();
       system("pause");
 
}
Добавлено через 45 минут
как только добавляю сетлокал в функцию, перестает корректно работать load.

Загружает данные из обычного txt файла такого содержания:

09342598623 56.30 life
05085458748 23.10 mtc
09765874598 11.20 kyivstar
09345874122 89.65 life
09645874114 11.50 mtc

Добавлено через 2 минуты
компилятор visual studio 10.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.02.2012, 00:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему когда в рабочую программу вставляю setlocale(LC_ALL, "Rus"); она перестает корректно работать (C++):

Чем отличается вызов функции setlocale(0, "") от setlocale(LC_ALL,"")? - C++
Например printf(setlocale(0, &quot;&quot;)); cout &lt;&lt; endl; printf(setlocale(LC_ALL, &quot;&quot;)); выдают одинаковый результат (ну, на моей...

Не работает "setlocale( LC_ALL,"Russian" )" - C++
В одной программе setlocale( LC_ALL,&quot;Russian&quot; ) работает, а в другой, ничем не отличающейся от первой, нет. В чем дело?

Не правильное значение при использовании {setlocale (LC_ALL, "Russian"); - C++
Почему после подключения команды #include &lt;locale.h&gt; ... setlocale (LC_ALL, &quot;Russian&quot;); программа начинает выдавать не правильный результат...

Не работает setlocale(LC_ALL,"Russian") или Говорим по русски - C++
оператор setlocale(LC_ALL,&quot;Russian&quot;); при проверке одной консольной программы сpp в 3 оболочках C++Builder, CodeBlocks, MS VisualStudio...

Чем можно заменить функцию setlocale(LC_ALL, "RUSSIAN")? - C++
напишите пожалуйста пример!!

Функция setlocale( LC_ALL,"Russian" ) и класс String - C++
У меня есть класс и головная функция этого класса. Переменные типа стринг я могу водить в консоли, ну как только я подключаю функцию...

3
retmas
Жарю без масла
864 / 746 / 168
Регистрация: 13.01.2012
Сообщений: 1,702
03.02.2012, 00:25 #2
для русской локали формат записи double другой: вместо 56.30 должно быть 56,30 (запятая, а не точка). вот и подумайте, какие значения будут прочтены
1
fors-dnet
3 / 3 / 0
Регистрация: 11.12.2011
Сообщений: 88
03.02.2012, 00:32  [ТС] #3
спасибо, не подумал бы что ошибка в этом. Спасибо за помощь!

Добавлено через 2 минуты
ещё вопрос, а на других ПК exe будет запускаться с русскими символами? А то нету возможности проверить. Извините если тупой вопрос
0
Serejke_qq
150 / 108 / 9
Регистрация: 06.07.2011
Сообщений: 224
Завершенные тесты: 2
03.02.2012, 01:23 #4
Цитата Сообщение от fors-dnet Посмотреть сообщение
ещё вопрос, а на других ПК exe будет запускаться с русскими символами?
в большенстве случаев будет)
1
03.02.2012, 01:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.02.2012, 01:23
Привет! Вот еще темы с ответами:

Неправильное отображение русского текста в консоли при использовании setlocale(LC_ALL, "Russian") - C++
Ребят, такая ситуация, прописал setlocale(LC_ALL, &quot;Russian&quot;);но в консоли вместо текста на русском-набор букв, в чем может быть...

setlocale( LC_ALL,"Russian" ); - C++
#include &lt;iostream&gt; #include &lt;string&gt; using namespace ::std; void main () { setlocale( LC_ALL,&quot;Russian&quot; ); string a; cout &lt;&lt;...

Кодировки - setlocale (LC_CTYPE, "rus") - C++
Проблемы с кодировками - setlocale (LC_CTYPE, &quot;rus&quot;) Банальщина, но решить просто не могу.. В общем при использовании русских шрифтов,...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.