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

Некорректное считывание из файла - C++

Восстановить пароль Регистрация
 
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
17.03.2012, 12:46     Некорректное считывание из файла #1
Есть необходимость записывать и считывать в файл и обратно
С первым все просто, со вторым казалось бы тоже, но не получается
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
void AddressBook::read_from_file(std::fstream& file)
{
//1
    std::istream_iterator<RegisteredPerson> iter(file), end;
    while (iter != end)
    {
         RegisteredPerson p;
         p = *iter;
         this->add_registered_person(p);
         ++iter;
    }
 
    std::cout << *this;
    system("Pause");
//2
    while (!file.fail())
    {
        unsigned int tmp_value;
        std::string tmp_string;
        RegisteredPerson person;
        
        file >> tmp_string;
        person.set_name(tmp_string);
        
        file >> tmp_string;
        person.set_middle_name(tmp_string);
        
        file >> tmp_string;
        person.set_sername(tmp_string);
        
        file >> tmp_string;
        person.set_city(tmp_string);
        
        file >> tmp_string;
        person.set_street(tmp_string);
        
        file >> tmp_value;
        person.set_home_number(tmp_value);
        
        file >> tmp_value >> tmp_value;
        person.set_room_number(tmp_value);
        
        add_registered_person(person);
    }
}
первый вариант работает
а второй считывает только первую запись person

не понимаю, почему?

пример файла для чтения
Anton Pavlovich Lavrenov dust Okt 12 1
df sf sdf sdf sf 3 4


то что все в одном методе написано - не обращайте внимание: само собой для проверки второго метода комменчу первый и наоборот
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.03.2012, 12:46     Некорректное считывание из файла
Посмотрите здесь:

C++ считывание из файла
C++ Считывание с файла
Считывание файла C++
Считывание из файла C++
некорректное считывание из файла C++
Считывание из файла C++
Некорректное считывание строки C++
Некорректное считывание строки C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Whiteha
Программист
33 / 33 / 4
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
17.03.2012, 13:03     Некорректное считывание из файла #2
В первом методе while же можно укоротить:
C++
1
2
3
4
while (iter != end)
        {
                 this->add_registered_person(*iter++);
        }

Насчёт второго варианта не очень понятно, в смысле он читает только одну запись и останавливается?
Просто у вас там будет прочитана только первая строка из вашей записи, он не будет читать
df sf sdf sdf sf 3 4
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
17.03.2012, 13:19  [ТС]     Некорректное считывание из файла #3
Whiteha, да мне все равно на первый вариант, мне надо чтобы второй работал. Мне просто надо написать код как можно проще, поэтому стараюсь не юзать STL

да, второй вариант читает только первую строку. А после выходит из цикла
почему не читает вторую и т.д.?

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
void AddressBook::read_from_file(std::fstream& file)
{
        while (!file.fail())
    {
                unsigned int tmp_value;
                std::string tmp_string;
        RegisteredPerson person;
        
        file >> tmp_string;
        person.set_name(tmp_string);
        
        file >> tmp_string;
        person.set_middle_name(tmp_string);
        
        file >> tmp_string;
        person.set_sername(tmp_string);
        
        file >> tmp_string;
        person.set_city(tmp_string);
        
        file >> tmp_string;
        person.set_street(tmp_string);
        
        file >> tmp_value;
        person.set_home_number(tmp_value);
        
        file >> tmp_value;
        person.set_room_number(tmp_value);
        
        add_registered_person(person);
    }
}
Добавлено через 13 минут
странно, проблема вдруг решилась и началось все считываться как надо
Yandex
Объявления
17.03.2012, 13:19     Некорректное считывание из файла
Ответ Создать тему
Опции темы

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