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

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

Восстановить пароль Регистрация
 
Dead_Messiah
 Аватар для Dead_Messiah
8 / 8 / 1
Регистрация: 22.10.2010
Сообщений: 125
Завершенные тесты: 1
16.02.2012, 00:29     Считывание с dat файла #1
Всем доброго времени суток!
Возникла проблема со считыванием структуры с типизированного файла.
Задача: Сформировать типизированный файл 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");
}
Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.02.2012, 00:29     Считывание с dat файла
Посмотрите здесь:

C++ считывание из файла
C++ Считывание из файла в С++
C++ Считывание из файла
считывание с файла... C++
C++ Считывание из файла
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
AzaKendler
 Аватар для AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
16.02.2012, 00:33     Считывание с dat файла #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
Dead_Messiah
 Аватар для Dead_Messiah
8 / 8 / 1
Регистрация: 22.10.2010
Сообщений: 125
Завершенные тесты: 1
16.02.2012, 00:40  [ТС]     Считывание с dat файла #3
AzaKendler, Вам не будет трудно показать, как оно должно выглядеть? Суть Вашего сообщения мне ясна, но как исправить я не знаю, ибо только с этом семестре начали учить С++.
AzaKendler
 Аватар для AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
16.02.2012, 00:42     Считывание с dat файла #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;
 
}

}
Dead_Messiah
 Аватар для Dead_Messiah
8 / 8 / 1
Регистрация: 22.10.2010
Сообщений: 125
Завершенные тесты: 1
17.02.2012, 00:44  [ТС]     Считывание с dat файла #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 минуты
Решено.
Yandex
Объявления
17.02.2012, 00:44     Считывание с dat файла
Ответ Создать тему
Опции темы

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