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

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

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

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

17.03.2012, 12:46. Просмотров 386. Ответов 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


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

некорректное считывание из файла - C++
ifstream ifst(FNAME_USERLIST); while(!ifst.eof()) { string templog; string temppas; int tempacc; ...

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

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

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

OpenCV. Некорректное чтение бинарного файла - C++
Здравствуйте. При использовании opencv (2.4.6) столкнулся со следующей особенностью (или багом). Имеются бинарные файлы (fits-файлы с...

Некорректное чтение строк из файла (fscanf) - C++
Доброго времени суток. Студенческая лаба, работа с файлами, CppBuilder6. Запись/чтение только через fprintf/fscanf. Записывает норм,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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
0
sandye51
программист С++
684 / 586 / 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 минут
странно, проблема вдруг решилась и началось все считываться как надо
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.03.2012, 13:19
Привет! Вот еще темы с ответами:

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

Считывание из файла - C++
Нужна помощь, уже не знаю, что делать. Проблема: Имеется функция для добавления хешированного логина и пароля в двоичный файл. ...

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

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


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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