3 / 3 / 0
Регистрация: 01.08.2008
Сообщений: 65
1

Иероглифы при чтении из файла

12.08.2008, 17:13. Показов 2253. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привожу код, в котором создаю, файл записываю в него данные. Затем пытаюсь их считать, выводит иероглифы... Что не так?. Спасибо.
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
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
 
 
int main() {
    ofstream txtfile( "Testfile.txt" );
    if (! txtfile) { 
        cout<<"didn't create!";
        exit(-1);
    }
    int a = 1;
    double b = 1.1;
    char d = 'a';
    char e = 'b';
    txtfile<<a
        <<' '<<b
        <<d<<' '
        <<e;
 
    ifstream optxt("Testfile.txt");
    if (! optxt) { 
        cout<<"didn't open!";
        exit(-1);
    }
    int f;
    double g;
    char n, m;
    
    optxt>>f>>g>>n>>m;
 
    cout<<"data from file: \n";
    cout<<"int = "<<f<<endl;
    cout<<"\ndouble = "<<g;
    cout<<"\nchar1 = "<<n;
    cout<<"\nchar2 = "<<m;
 
 
    return 0;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.08.2008, 17:13
Ответы с готовыми решениями:

Выводятся иероглифы при чтении структуры из файла...
Вообщем все вроде работает, но выводятся какие-то иероглифы при считывании с текстового файла... ...

"Нарушение прав доступа при чтении по адресу" при чтении структур из бинарного файла
Пытаюсь разобраться со структурами в бинарных файлах. Допустим, есть массив структур. Записываю...

Иероглифы при выводе из txt файла
Всем привет! Есть текстовый файл и именно с ним необходимо произвести некоторые манипуляции....

Можно ли при чтении из файла элементов в список удалять эти элементы(без очистки файла)
Допустим,есть файл,в нём записаны 3 обьекта(отличаются одним параметром,по которому как раз и...

3
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
12.08.2008, 17:40 2
Не так то, что компилятор не человек, чтобы угадывать, что Вы пробелом собираетесь разделить переменные.
Код
    txtfile<<a
        <<endl<<b<<endl
        <<d<<endl
        <<e<<endl;
P. S. если вы программе сказали >>i , а i у вас int, то он и прочитает подряд четыре байта, не обращая ни на что внимание. И будет прав
0
3 / 3 / 0
Регистрация: 01.08.2008
Сообщений: 65
13.08.2008, 11:47  [ТС] 3
Спасибо!

Добавлено через 17 часов 55 минут 27 секунд
Кстати, достаточно ставить только 1 endl в конце, а данные разделять пробелом. Иначе данные будут в файле стоять в столбик, а последовательные данные обычно располагают по строкам ( по записям )
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
13.08.2008, 12:00 4
Разделять переносом строки идеологически надежней. Если уж на то пошло, то вообще без символа конца строки все можно прочитать. Вот только это не катит...
Я показал, как мне удобней. Некоторые либы (был у меня случай когда-то) по умолчанию в качестве разделителя видят перенос, а не пробельные символы. Поэтому и читалось все подряд.
Да и вообще! Проблема совсем не в endl. А в том, что файл не закрыт и конца ему не видно

Последовательные данные без разницы, как располагать. Главное то, как они читаться будут. Если ничего не планируется больше, то можно и в строку и вообще без endl.
Код
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;

int main() {
	ofstream txtfile("Testfile.txt");
    if (! txtfile) { 
        cout<<"didn't create!";
        exit(-1);
    }
    int a = 1;
    char d = 'a';
    char e = 'b';
    txtfile<<a<<d<<e;
	txtfile.flush();

    FILE *file = fopen("Testfile.txt", "rb");
    if (! file) { 
        cout<<"didn't open!";
        exit(-1);
    }
    __int8 f;
    char *n = (char*)malloc(3);
    
    fread(&f, 1, 1, file);
	fread(n, 1, 2, file);
	*(n+2) = '\0';

    cout<<"data from file: \n";
    cout<<"int = "<<f<<endl;
    cout<<"\nchars = "<<n;

	cin.get();
    return 0;
}
Вызов flush еще надежней, чем endl. Он добавит символ конца файла сам. И спокойно можно обойтись без любых разделителей
Также можно просто закрыть стрим сохранив его в файл ( txtfile.close(); ). Конец файла добавится и тоже все будет работать. Так что кому-то "достаточно" endl, кому-то он и не нужен
Способов - куча.
0
13.08.2008, 12:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.08.2008, 12:00
Помогаю со студенческими работами здесь

Ошибка при вызове метода класса, при чтении из файла
добрый день, пытаюсь считать данные из и запихнуть их в список в файле у меня вот такие данные...

При чтении текстового файла выдает иероглифы
при чтении из csv файла выдает в memo иероглифы. Кодировка тут явно не причем так как не показывает...

Иероглифы при открытии файла
Добрый день! Помогите пожалуйста, не знаю что делать, все перепробовал… Стояла операционка Windows...

Как при чтении файла проверить достигнут ли конец файла?
Как при чтении файла проверить достигнут ли конец файла? Dim Red As IO.BinaryReader Red = New...

При компиляции файла справки получаются иероглифы
Привет ! Хотел создать файл справки в программе workshop, но при компиляции получается иероглифы....

fread выводит грязь при при чтении из файла
задача заключалась в том, чтобы записать содержимое файла в массив. проблема в том, что при выводе...


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

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

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