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

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

Войти
Регистрация
Восстановить пароль
 
Леонид ГаниполЯ
3 / 3 / 0
Регистрация: 01.08.2008
Сообщений: 65
#1

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

12.08.2008, 17:13. Просмотров 910. Ответов 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
#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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.08.2008, 17:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Иероглифы при чтении из файла (C++):

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

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

Expression при чтении из файла - C++
Добрый день. Не могу понять - при чтении файла вылетает ошибка(экспрешн stream!=NULL) притом файл создан там же где main.cpp ...

Ошибка при чтении файла - C++
Есть вот такой код: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt; ...

фейл при чтении из файла - C++
Вот абсолютно работоспособный код, где чтение и запись выполняются непосредственно в main. #include &lt;iostream&gt; #include &lt;fstream&gt; ...

Ошибка при чтении из файла - C++
Файл открывается, но читаться из него информация не хочется. Исходник int c_array :: save(char *path) { FILE *f; f =...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Vourhey
Почетный модератор
6481 / 2256 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
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
Vourhey
Почетный модератор
6481 / 2256 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.08.2008, 12:00
Привет! Вот еще темы с ответами:

Ошибка при чтении файла - C++
Необработанное исключение по адресу 0x0FE4172C (msvcp140d.dll) в .exe: 0xC0000005: нарушение прав доступа при записи по адресу 0xCDCDCDCD. ...

Зацикливание при чтении из файла - C++
Пытаюсь читать из файла данные,сохраненные из Экселя TempBook-&gt;SaveAs(PathFile+&quot;\\&quot;+&quot;Temp&quot;,Excel::xlCSV , &amp;vtMissing, &amp;vtMissing,...

Ошибка при чтении из файла - C++
Помогите разобраться с чтением из файла. Листинг указан ниже. Программа выполняется полностью, и только перед выполнением последней строки...

Абракадабра при чтении из файла - C++
Добрый вечер! Имеется файл, в котором записан двумерный символьный массив, представляющий собой схему графа, например такой: 0 A B C D...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.08.2008, 12:00
Ответ Создать тему
Опции темы

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