根据用户输入

时间:2015-10-30 06:07:58

标签: c++ input structure

我在源模块中创建了一个名为student的结构,如下所示:

struct Student
{
std::string gradeOption;
std::string name;
unsigned int id;
};

在main.cpp源文件中,我打算阅读遵循这些规则的用户输入:

第一行的正整数,表示学生人数 将有n行,每行都有这种格式:一个id号后跟一个空格,一个等级选项后跟一个空格,学生的名字后跟一个空格。成绩选项后的任何字符都被视为学生姓名。 这是一个例子

5
123 G Tom Cruise
234 G Boo Scary
345 G Jane Student
456 P Joe Student
567 G Too-Many Courses

我无法弄清楚如何创建n个结构。我的问题是我无法弄清楚如何命名它们。如果我要做一个while循环直到i = 5,我仍然无法在不覆盖相同结构的情况下提出名称。另外,我应该在main.cpp文件或structure.cpp文件中创建这些结构吗?

我还尝试通过将id作为数组名称并使其成为字符串数组

来使用数组
void createStudentArray(int numStudents, int size)
for (int i = 0; i < numStudents; i++)
std::string arrayName;
std::string gradeOption, studentName
std::string* arrayName = std::string[size];

1 个答案:

答案 0 :(得分:1)

我已经制作了示例代码。也许它会有用。

#include <string>
//#include <vector>
#include <iostream>

struct Student {
    std::string gradeOption;
    std::string name;
    unsigned int id;
};

// this tells how to read student from console
void operator>>(std::istream& is, Student& s) {
    is >> s.id >> s.gradeOption >> s.name;
}

// this tells how to write student to console
void operator<<(std::ostream& os, Student& s) {
    os << s.id << " " << s.gradeOption << " " << s.name << std::endl;
}

int main(int argc, char* argv[]) {
    using namespace std;

    // here will be placed a number of students to read
    size_t count;

//  // container for students
//  std::vector<Student> students;

//  // last read student
//  Student student;

    cout << "enter count:" << endl;
    cin >> count;
    cout << "reading " << count << " students" << endl;

//  while (count--) {
//      cin >> student;
//      students.push_back(student);
//  }
//
//  for (Student& s: students) {
//      cout << s;
//  }

    Student* students = new Student[count];

    for (size_t i = 0; i < count; ++i) {
        cin >> students[i];
    }

    for (size_t i = 0; i < count; ++i) {
        cout << students[i];
    }

    delete[] students;

    return 0;
}