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

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

Войти
Регистрация
Восстановить пароль
 
sandye51
программист С++
682 / 584 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
#1

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

17.03.2012, 12:46. Просмотров 384. Ответов 2
Метки нет (Все метки)

Есть необходимость записывать и считывать в файл и обратно
С первым все просто, со вторым казалось бы тоже, но не получается
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++
ifstream ifst(FNAME_USERLIST); while(!ifst.eof()) { string templog; string temppas; int tempacc; ...

Некорректное считывание строки - C++
Собственно столкнулся с такой проблемой... Не считываются ФИО с пробелами. Либо, если юзаю gets, то во второй записи исчезает пункт ФИО. Да...

Некорректное считывание строки - C++
Доброго времени суток. Подскажите, пожалуйста, с чем связана данная проблема: есть текст в файле, вот такой: &quot;Microsoft MS, MS-DOS,...

Считывание из файла - C++
Ребят, нужно сделать так чтобы программа считывала файл таким образом: первая строка (в ней число) загоняется в переменную, все следующие...

Считывание из файла. - C++
Считывание из файла. Подскажите пожалуйста!!!! Очень надо!!!!!! Как из файла считать только определенную матрицу (фрагмент) и...

Считывание из файла - C++
Здравствуйте. подскажите как сделать, чтобы с файла считывались 2 числа, но при этом в файле это выглядит вот так : (25,16). Пытался...

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

Считывание с файла - C++
#Oblast1 g;ergtr hwtrh rt h trh ert h hry e #Oblast2 oooooooqwe qweeeeeeeeee qweeeeeeeee #Oblast3 3333333333

Считывание из файла - C++
bool Poisk_Street() { ifstream fin; std::string street,fail; cout&lt;&lt;endl&lt;&lt;&quot;Введите улицу для поиска:&quot;; cin&gt;&gt;street; ...

считывание с файла... - 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
программист С++
682 / 584 / 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 минут
странно, проблема вдруг решилась и началось все считываться как надо
Ответ Создать тему
Опции темы

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