Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

c++ вопрос по структурам

Dimonыч Гуру (2944), закрыт 11 лет назад
Задание: из файла считать в структуру фамилию, имя, телефон, дату рождения. Сделать поиск человека по номеру телефона.
Поиск работает, но не понимаю, почему из файла читает не все записи, а только первые 4?
Код тут pastebin.com/UP1pybL7
В текстовом файле:
Sleptsov Dima
12-34-56
20.10.1992

Ivanov Vasya
65-43-21
01.01.1995

Petrov Petya
26-66-68
21.06.1996

Sidorov Ivan
40-28-47
05.11.1980

Petrov Kolya
26-66-68
21.06.1996

Karasev Maxim
88-24-65
08.09.1970
Лучший ответ
Капитан Гугл Искусственный Интеллект (146199) 11 лет назад
Вот поэтому и нельзя делать C/C++ первым языком.. .
У тебя файл текстовый, т. е. строки заканчиваются символом новой строки. А читаешь ты его как бинарный, с фиксированной длиной строк, а потом эти строки обрабатываешь как оканчивающиеся на нулевой символ. Странно, что аж 4-х читает.
DimonычГуру (2944) 11 лет назад
А как тогда можно сделать чтобы полностью читало? fscanf?
Капитан Гугл Искусственный Интеллект (146199) Зависит от того, как записывал, и чем хочешь работать - C не навязывает средства, а только предлогает, от этого у новичков и проблемы. Если файл действительно текстовый, то тут лучше всего вместо f.get(man.fi, 30); f.get(); делать f.getline(man[ i].fi,29);//последний символ - всегда 0
Остальные ответы
ra Высший разум (113244) 11 лет назад
Читает все:

#include <iostream>
#include <fstream>
#include <string>
#include <vector>

using namespace std;

struct note {
    string fi;
    string nom;
    string rojd;
};

int main() {
    vector<note> notes;
    ifstream f("baza.txt");
    string fam, im, nom, rojd;

    while (f >> fam >> im >> nom >> rojd) {
        note n = { fam + ' ' + im, nom, rojd };
        notes.push_back(n);
    }

    for (int c = 0; c < notes.size(); ++c) {
        cout << "FI: " << notes[c].fi << "; NOM: " << notes[c].nom << "; ROJD: " << notes[c].rojd << endl;
    }

    return 0;
}

DimonычГуру (2944) 11 лет назад
спасибо
Похожие вопросы