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

Проблемы с кодировкой при выводе данных - C++

Восстановить пароль Регистрация
 
BORSHEVIK
0 / 0 / 0
Регистрация: 20.08.2012
Сообщений: 29
28.01.2013, 17:32     Проблемы с кодировкой при выводе данных #1
Пользуюсь хрюшей и VS 2008
Программа 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
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
int main()
{
    setlocale(LC_ALL,"Russian");
    char ch='x';
    int j=77;
    double d=6.02;
    string str1="Kafka";
    string str2="Proust";
    ofstream outfile("fdata.txt");
    outfile<<ch
           <<' '
           <<j
           <<' '
           <<d
           <<' '
           <<str1
           <<' '
           <<str2;
cout<<"Файл записан!\n";
return 0;
}
Программа 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
int main()
{
    setlocale(LC_ALL,"Russian");
    char ch;
    int j;
    double d;
    string str1;
    string str2;
    ifstream infile("fdata.txt");
    infile>>ch>>j>>d>>str1>>str2;
    cout<<"1:"<<ch<<endl
        <<"2:"<<j<<endl
        <<"3:"<<d<<endl
        <<"4:"<<str1<<endl
        <<"5:"<<str2<<endl;
cout<<"Вывод информации с файлf завершён!\n";
return 0;
}
Вот результат 2-й программы в консоле:
1:K
2:1242200
3:3.04544e-308
4:
5:
Вывод информации с файл завершён!
Для продолжения нажмите любую клавишу . . .


добавление строки
C++
1
infile.imbue(locale(".1251"));
не помогло.

1 программа работает как надо,её суть состоит в том,чтобы записать на fdata.txt данные, 4-х разных типов,прописанных в программе,она их туда закидывает,проверял,всё чётко,НО....
2 программа работает плохо. Она должна была считать данные из файла,который был создан в 1-ой программе,но,может он и открывает его,но считывает полную ересь,неизвестные данные,взятые из ни от куда,причём строковые переменные он вообще не выводит,а первый символ типа char при каждой компиляции выводит ЛЮБОЙ символ. Я подозреваю,что проблема с потоком и в него вмешиваются посторонние данные,но и с другой стороны это не логично,т.к. есть чёткие функции,а если они туго работают,то и смысла бы в них не было,к тому же данные типа int и double он выводит тоже другие,но они статичны при каждой компиляции,думаю,что просто банальная проблема в кодировке при выводе из файла или ХЗ что.Прошу помочь ибо не знаю,что делать!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.01.2013, 17:32     Проблемы с кодировкой при выводе данных
Посмотрите здесь:

Проблемы с кодировкой при переключении из Debug в Release в MSVS 2010 C++
C++ Проблемы с кодировкой при сравнении строк
Проблемы с кодировкой C++
C++ Проблемы с кодировкой при подключении текстового файла
C++ Проблемы с кодировкой символов
При выводе данных в файл стереть всё, что в нём было C++
При выводе данных char исчезает первый элемент C++
C++ Добавляются лишние символы при выводе данных в поток

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
hinst
 Аватар для hinst
22 / 8 / 1
Регистрация: 06.01.2013
Сообщений: 113
28.01.2013, 17:46     Проблемы с кодировкой при выводе данных #2
ЭХХХХ
только что прогнал твои программы на Visual C++ 2010 на Windows 7, слив их в одну вот так вот:
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
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
int main1()
{
    setlocale(LC_ALL,"Russian");
    char ch='x';
    int j=77;
    double d=6.02;
    string str1="Kafka";
    string str2="Proust";
    ofstream outfile("fdata.txt");
    outfile<<ch
           <<' '
           <<j
           <<' '
           <<d
           <<' '
           <<str1
           <<' '
           <<str2;
cout<<"Файл записан!\n";
return 0;
}
 
int main2()
{
    setlocale(LC_ALL,"Russian");
    char ch;
    int j;
    double d;
    string str1;
    string str2;
    ifstream infile("fdata.txt");
    infile>>ch>>j>>d>>str1>>str2;
    cout<<"1:"<<ch<<endl
        <<"2:"<<j<<endl
        <<"3:"<<d<<endl
        <<"4:"<<str1<<endl
        <<"5:"<<str2<<endl;
cout<<"Вывод информации с файлf завершён!\n";
return 0;
}
 
int main()
{
    main1();
    main2();
}
выводит

1:x
2:77
3:6.02
4:Kafka
5:Proust

Problem?
Запускал из PowerShell. Я думаю, что, возможно, проблема в том, что у консоли своя кодировка. То есть, в файл всё может записываться правильно, и читаться может правильно. Просто напросто может кодировка файла и консоли не совпадать; у виндоконсоли по умолчанию кодировка cp 866. А не 1251. И она, как и 1251 считается локальной и правильной для рус. языка, да...
А вообще... Да кто его знает??? @_@ @_@ @_@
BORSHEVIK
0 / 0 / 0
Регистрация: 20.08.2012
Сообщений: 29
28.01.2013, 17:59  [ТС]     Проблемы с кодировкой при выводе данных #3
Ка бы это по-идиотски не звучало,но проблема состояла в шрифте консоли(нужно установить lucida console),нужно было его тупо поменять и всё стало работать как надо....
Yandex
Объявления
28.01.2013, 17:59     Проблемы с кодировкой при выводе данных
Ответ Создать тему
Опции темы

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