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

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

Войти
Регистрация
Восстановить пароль
 
Dead_Messiah
8 / 8 / 1
Регистрация: 22.10.2010
Сообщений: 126
Завершенные тесты: 1
#1

Считывание с dat файла - C++

16.02.2012, 00:29. Просмотров 1152. Ответов 4
Метки нет (Все метки)

Всем доброго времени суток!
Возникла проблема со считыванием структуры с типизированного файла.
Задача: Сформировать типизированный файл Info.dat с информацией про N людей, у которых есть автомобили (фамилия владельца, марка автомобиля, цвет). Считать с файла фамилии тех, у кого имеется "Лада" красного цвета. В файл записывает нормально, но считывает потом нужную информацию не с файла, а с клавиатуры. Подскажите, в чём моя ошибка?
Вот код моей программы:
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
#include <iostream>              
#include <string>
#include <fstream>
using namespace std;
struct owners
{ string surname;
  string type;
  string color;
} car[3];
int num;
 
void write()
{ 
owners LB;
string type;
string color;
ofstream file ("C:\\Info.dat");
cout <<"Enter number of owners: ";
cin >>num;
cout << "\n";
    for(int i = 0; i < num; i++)
{      cout << "Enter surname: ";
        cin >> car[i].surname;
        cout << "Enter type of car: ";
        cin >> car[i].type;
        cout << "Enter color of car: ";
        cin >> car[i].color;
                cout << "\n"<< endl;
 
}
    file.write((char*)&car,sizeof (*car));
    file.close();
}
    
 
 
void read()
{
    owners LB;
string type;
string color;
ifstream file ("C:\\Info.dat");
 
 
cout << "Enter the type for search: ";
cin >> type;
cout << "Enter the color for search: ";
cin >> color;
for(int i=0; i<num; i++)
{
if((car[i].type == type) && (car[i].color == color))
cout << "\n"<< endl
<<"Owner's surname: " <<car[i].surname<< endl
 
<< "\n"<< endl;
 
}
file.read((char*)&car,sizeof (car));
file.close();
 
}
void main ()
{
write();
read();
system ("pause");
}
Заранее спасибо.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.02.2012, 00:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Считывание с dat файла (C++):

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

Запись и чтение файла dat - C++
Данная программа ищет файлы с расширением *.txt и выводит их имена и даты создания, и создаёт каталог FIND и файл find.dat. Как сделать что...

Чтение и запись с .dat файла - C++
В моей задаче нужно осуществить запись и считывание даных из .dat файла. Програмка что то типо больницы. Прошу помочь мне в этом. Вот код: ...

Как считать из .dat файла числа с мантиссой? - C++
В файле содержится массив, где есть числа типа double, некоторые из них в формате 1.2345-е08. Не знаю, как такие числа считывать. Пробовала...

Записать в новый файл все символы из некоторого символьного файла chrs.dat, не являющиеся буквами - C++
Записать в новый файл все символы из некоторого символьного файла chrs.dat, не являющиеся буквами. Определить, сколько таких символов.

Считывание файла в массив и запись нового файла - C++
Консоль VS C++. Текстовый файл открывается как бинарный, и считывается по 100 байт в массив - и сразу они переписываются в другой файл. В...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
16.02.2012, 00:33 #2
Цитата Сообщение от Dead_Messiah Посмотреть сообщение
cin >> car[i].surname;
car глобальная переменная и тут ты записал в нее значение и оставил

Добавлено через 51 секунду
Цитата Сообщение от Dead_Messiah Посмотреть сообщение
if((car[i].type == type) && (car[i].color == color))
cout << "\n"<< endl
<<"Owner's surname: " <<car[i].surname<< endl
а здесь прочитал ранее когда то записанное в нее значение.

поскольку массив car хранит инфо о всех машинах - ты всегда в цикле попадаешь в тру условие и до чтения из фала не доходит

C++
1
2
file.read((char*)&car,sizeof (car));
file.close();
это подними над if и прочитается из файла в car
0
Dead_Messiah
8 / 8 / 1
Регистрация: 22.10.2010
Сообщений: 126
Завершенные тесты: 1
16.02.2012, 00:40  [ТС] #3
AzaKendler, Вам не будет трудно показать, как оно должно выглядеть? Суть Вашего сообщения мне ясна, но как исправить я не знаю, ибо только с этом семестре начали учить С++.
0
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
16.02.2012, 00:42 #4
Цитата Сообщение от AzaKendler Посмотреть сообщение
Код C++

это подними над if и прочитается из файла в car
попробуй поднять просто процедуру чтения из файла над условием. это самое простое что не переделывать все. если процедура чтения из файла в car корректна - то в car запишутся машинки из файла


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
file.read((char*)&car,sizeof (car));
file.close();//сюда. 
 
 
for(int i=0; i<num; i++)
{
 
//file.read((char*)&car,sizeof (car));
//file.close();//сюда если настаиваешь на постоянном открытии закрытии файла
 
if((car[i].type == type) && (car[i].color == color))
cout << "\n"<< endl
<<"Owner's surname: " <<car[i].surname<< endl
 
<< "\n"<< endl;
 
}

}
1
Dead_Messiah
8 / 8 / 1
Регистрация: 22.10.2010
Сообщений: 126
Завершенные тесты: 1
17.02.2012, 00:44  [ТС] #5
Не хочет. Создал отдельный проект, где есть только функция считывания файла: мало того, что после ввода марки авто и цвета для поиска программа завершает свою работу, так Visual Studio 2008 мне выдаёт "Необработанное исключение в "0x52547b3f" в "Testing.exe": 0xC0000005: Нарушение прав доступа при записи "0x6164614c".", а после нажатия "Прервать" - "Нет исходного кода для текущего места.".
И это появляется тогда, когда я ставлю
C++
1
2
file.read((char*)&car,sizeof (car));
file.close();
над for. А если под for - то просто ничего не выводит после запроса данных для поиска и завершает свою работу.

Добавлено через 10 часов 52 минуты
Нет ни у кого идей по данной теме? Хотелось бы разобраться этой проблеме..

Добавлено через 13 часов 3 минуты
Решено.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2012, 00:44
Привет! Вот еще темы с ответами:

Считывание с файла - C++
Добрый вечер! Считываю с файла посимвольно строку (навсякий случай вот так x = infile.get();) есть ли какая нибудь функция для...

Считывание с файла - C++
Суть задачи такова дан файл test.txt нужно вывести на экран число таких групп букв, которые начинаются и кончаются одной и тойже...

Считывание из файла - C++
Дан файл с данными типа: Петров Роман 1989 04 15 5 4 3 5 естесственно, что данных больше.. Последние 4 цифры - это оценки.. Надо...

Считывание из файла - C++
Есть к примеру некий файл d:\\file.txt Мне оттуда нужно считать переменные. Все нормально считывает fsсanf если в файле ТОЛЬКО цифры. ...


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

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

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