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

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

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

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

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

Ошибка при чтении файла C++
C++ Проверка при чтении из файла
Ошибка при чтении из файла C++
C++ Выводятся иероглифы при чтении структуры из файла...
C++ bool при чтении из файла
Expression при чтении из файла C++
фейл при чтении из файла C++
Зацикливание при чтении из файла C++
Абракадабра при чтении из файла C++
C++ Ошибка при чтении файла
C++ Ошибка при чтении из файла
C++ Мусор при чтении файла

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6471 / 2246 / 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, то он и прочитает подряд четыре байта, не обращая ни на что внимание. И будет прав
Леонид ГаниполЯ
3 / 3 / 0
Регистрация: 01.08.2008
Сообщений: 65
13.08.2008, 11:47  [ТС]     Иероглифы при чтении из файла #3
Спасибо!

Добавлено через 17 часов 55 минут 27 секунд
Кстати, достаточно ставить только 1 endl в конце, а данные разделять пробелом. Иначе данные будут в файле стоять в столбик, а последовательные данные обычно располагают по строкам ( по записям )
Vourhey
Почетный модератор
6471 / 2246 / 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, кому-то он и не нужен
Способов - куча.
Yandex
Объявления
13.08.2008, 12:00     Иероглифы при чтении из файла
Ответ Создать тему
Опции темы

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