2015-09-04 3 views
0

Я новичок в программировании, и у меня возникли проблемы с чтением данных из файла и их вводом в массив структур, при этом отслеживание каждого вводимого данных:Простая программа: сохранение данных из файла в массив Struct

файл будет содержать:

имя, номер удостоверения личности, и ГПД

Courtney Love 1234569 3.5 
    Bob Joe 1234570 3.0 
    Dave Henry 1234571 2.9 

struct Student 
{ 
    string name; 
    int id; 
    float GPA; 
    void printStudent(); 
}; 

Объявите массив типа Student, который может вместить до 5 человек:

Student a_members[5]; 

Откройте файл, читайте в каждой строке и сохранять данные в массиве, следить за каждый студент читать:

fstream file_; 
    file_.open ("students.txt"); 
    if(file_.is_open()) 
    { 
     while(file_.good()) 
     { 
     } 
    } 
    else 
    { 
    cout << "File is not open"<< endl; 
    } 
    return 0; 

Я застрял на «а» условном операторе. После этого я не знаю, что мне делать, чтобы вводить данные из файла по строкам и помещать их в «массив структур». На данный момент я чувствую, что все пробовал! Я удалил все и подумал, что лучше начать все сначала. Слишком сложно! Может быть, я просто не понимаю эту концепцию. Если кто-то может указать мне в правильном направлении, пожалуйста, сделайте это! Спасибо!

+0

Простое решение: найдите stackoverflow для поиска «C++ read file array» или «C++ read file structure». –

+1

Вы посмотрели Связанные вопросы, перечисленные справа? [Чтение из файла в массив структур] (http://stackoverflow.com/questions/20274217/reading-from-a-file-into-an-array-of-structs?rq=1), [Чтение данных из файла и сохранить в массив структур] (http://stackoverflow.com/questions/29814933/read-data-from-file-and-store-into-an-array-of-structs?rq=1). ..? – Leiaz

ответ

1

Вы не должны использовать good(), как и вы не должны использовать eof().
(Ни используются в любом приличном материале начинающего уровня, но каждый начинающий удается найти их. А потом они удивляются, почему это не работает.)

Вы должны вместо этого полагаться на то, что сам поток «true-ish», если он находится в хорошем состоянии, и просто продолжайте читать, пока это не так.

Идиоматические C++ будет выглядеть следующим образом:

std::ifstream file("students.txt"); 
Student s; 
while (file >> s.name >> s.id >> s.GPA) 
{ 
    // Process the student 
} 

или симпатичную версию:

std::istream& operator>> (std::istream& is, Student& s) 
{ 
    return is >> s.name >> s.id >> s.GPA; 
} 

std::ifstream file("students.txt"); 
Student s; 
while (file >> s) 
{ 
    // Process the student 
} 

(В вашем коде, вам необходимо также следить за сколько Student с вы «ве читал)

1

Вот один из возможных решений.

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

struct Student 
{ 
    Student() : first_name(), surname(){} 
    char first_name[64]; 
    char surname[64]; 
    int id; 
    float GPA; 
    void printStudent() 
    { 
     std::cout << "Name: " << first_name << " " << surname << " ID: " << id << " GPA: " << this->GPA << std::endl; 
    } 
}; 

std::vector<Student>student; 

bool LoadFile(const char* filename) 
{ 
    if (filename == NULL)return false; 
    std::fstream stream(filename, std::ios::in); 
    if (!stream.is_open())return false; 
    else 
    { 
     char buffer[255]; // for solution 1! 
     while (!stream.eof()) 
     { 
      memset(buffer, 0, sizeof(buffer)); 
      Student _student; 

      #pragma region SOLUTION_1 
      //stream.getline(buffer, sizeof(buffer)); 
      //sscanf(buffer, "%s %s %d %f", _student.first_name, _student.surname, &_student.id, &_student.GPA); 
      #pragma endregion 

      #pragma region SOLUTION_2 
      stream >> _student.first_name >> _student.surname >> _student.id >>_student.GPA; 
      #pragma endregion 

      student.push_back(_student); 
      student[student.size() - 1].printStudent(); 
     } 
    } 
    return true; 
} 

int main() 
{ 
    LoadFile("students.txt"); 
    getchar(); 
    return 0; 
} 
+0

Пожалуйста, прочитайте [этот вопрос] (http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong) и его ответы. – molbdnilo

 Смежные вопросы

  • Нет связанных вопросов^_^