Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 30, средняя оценка - 4.87
fors-dnet
 Аватар для fors-dnet
3 / 3 / 0
Регистрация: 11.12.2011
Сообщений: 88
03.02.2012, 00:19     Почему когда в рабочую программу вставляю setlocale(LC_ALL, "Rus"); она перестает корректно работать #1
Программа сначала считывает данные с файла, потом сортирует их и сохраняет. Мне нужно было сделать меню на русском, но после добавления строчки сетлокал программа перестает корректно считывать дынные из файла. Вот код программы, помогите, в чём ошибка, если сетлокал убрать и оставить на англ всё норм работает. Всё это находится в функции гет:
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.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.02.2012, 00:19     Почему когда в рабочую программу вставляю setlocale(LC_ALL, "Rus"); она перестает корректно работать
Посмотрите здесь:

Кодировки - setlocale (LC_CTYPE, "rus") C++
Функция setlocale( LC_ALL,"Russian" ) и класс String C++
C++ Не работает "setlocale( LC_ALL,"Russian" )"
Чем можно заменить функцию setlocale(LC_ALL, "RUSSIAN")? C++
C++ Не работает setlocale(LC_ALL,"Russian") или Говорим по русски
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
03.02.2012, 00:25     Почему когда в рабочую программу вставляю setlocale(LC_ALL, "Rus"); она перестает корректно работать #2
для русской локали формат записи double другой: вместо 56.30 должно быть 56,30 (запятая, а не точка). вот и подумайте, какие значения будут прочтены
fors-dnet
 Аватар для fors-dnet
3 / 3 / 0
Регистрация: 11.12.2011
Сообщений: 88
03.02.2012, 00:32  [ТС]     Почему когда в рабочую программу вставляю setlocale(LC_ALL, "Rus"); она перестает корректно работать #3
спасибо, не подумал бы что ошибка в этом. Спасибо за помощь!

Добавлено через 2 минуты
ещё вопрос, а на других ПК exe будет запускаться с русскими символами? А то нету возможности проверить. Извините если тупой вопрос
Serejke_qq
 Аватар для Serejke_qq
149 / 107 / 9
Регистрация: 06.07.2011
Сообщений: 224
Завершенные тесты: 2
03.02.2012, 01:23     Почему когда в рабочую программу вставляю setlocale(LC_ALL, "Rus"); она перестает корректно работать #4
Цитата Сообщение от fors-dnet Посмотреть сообщение
ещё вопрос, а на других ПК exe будет запускаться с русскими символами?
в большенстве случаев будет)
Yandex
Объявления
03.02.2012, 01:23     Почему когда в рабочую программу вставляю setlocale(LC_ALL, "Rus"); она перестает корректно работать
Ответ Создать тему
Опции темы

Текущее время: 04:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru