如何从文件循环输入并存储到数组变量?

时间:2016-07-01 18:53:47

标签: c++ arrays class loops input

我是C ++的新手并且尝试学习如此原谅我犯的任何错误。我有一个文件,在文件中它包含以下格式的数据,

"字符串" ,"字符串",包含100个条目的字符和数字。  即#B; Billy Joel A 96 Tim McCan B 70"。

我想将这些条目存储在一个类数组中(也许我的意思是实例或对象,我是新手,因此不确定)。

这是我的不良尝试: 之所以不好,它没有得到下一组学生信息...我怎么能想出一个循环来处理这个?所以我可以得到所有学生的名字?必须要做的就是不要输入100个变量来输入信息。

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

using namespace std;


class Student{
private:
    int grade;
    char grade_letter; 
public: 
    struct Student_info(){
        void set_firstname();
        void set_lastname(); 
        string get_firstname(); 
        string get_lastname();          
    };


}myStudent_info;

 /// Set / get code below but left out. 

int main()
{ 
    Student myStudent[100];

    ifstream myfile("input.txt");
    if (myfile.is_open())
    {
        string a, b;
        char c;
        int d;

        myfile >> a >> b >> c >> d; 
        for (int i = 0; i < 100; i++) {
            myStudent[i].myStudentInfo.set_firstname(a);
            myStudent[i].myStudentInfo.set_lastname(b);
            /// the rest of variables...etc                     
        }

        myfile.close();
    }
    //Exit 
    cout << endl;
    system("pause");
    return 0;
}

2 个答案:

答案 0 :(得分:3)

您只输入1名学生的数据,然后循环100次。如果你想输入100名学生的数据并存储每一个,这就是你应该做的事情

for (int i = 0; i < 100; i++) {
    myfile >> a >> b >> c >> d;
    myStudent[i].myStudentInfo.set_firstname(a);
    myStudent[i].myStudentInfo.set_lastname(b);
    /// the rest of variables...etc                     
}

而不是

myfile >> a >> b << c << d; 
for (int i = 0; i < 100; i++) {
    myStudent[i].myStudentInfo.set_firstname(a);
    myStudent[i].myStudentInfo.set_lastname(b);
    /// the rest of variables...etc                     
}

答案 1 :(得分:0)

你在正确的轨道上继承了我将要做的事情。但重点是你需要制作一个矢量或学生阵列。

class Student{
private:
  int grade;
  char grade_letter;
  string firstname;
  string lastname;
public: 
      Studnet();
      void set_firstname(string x);
      void set_lastname(string x); 
      void set_letter(char x); 
      void set_grade(int x);          
};


int main() { 
    Student x;
    std::vector<Student> list(100);

    sting input;

    ifstream myfile("input.txt");
    if (myfile.is_open()) {
        while( getline(myfile, input)) {

            // divide input variable into parts
            // use set functions to set student x's values
            // push student x into vector of students list using "list.push_back(x);"

        }
        myfile.close();
    }
    return 0;
}