在C ++中将Structs的数组存储在外部文件中

时间:2014-03-05 10:32:45

标签: c++ arrays struct

所以我正在为我的CS162课程完成一项家庭作业,这要求我制作一个允许用户输入大学课程计划的程序。用户输入他们已经服用,目前正在服用和/或计划服用的课程,其类别包括:部门/班级编号,班级名称,学期/年份,班级是否为其专业所需,以及任何其他课程评论。然后,程序应该与外部数据文件一起存储此异常,以便存储类并且不会丢失。该程序应该能够在内存中存储多达60个类。

我知道如何创建strucs数组,我知道外部文件背后的基础知识,但我想我很难将两者结合起来(我在这里是个新手,很抱歉,如果这真的很基本!)

这是我到目前为止所拥有的:

struct college_class
{
    char dept_classnumber;
    char class_name;
    char term_year;
    char is_required;
    char comments;
    char grade;
}

college_class[60]

int main()
{
    int n;
    char again;
    for(n=0;n<60;n++)
    {
        do
        {
            cout<<"Enter department and class number (e.g. CS162): ";
            getline (cin,college_class[n].dept_classnumber);
            cout<<"Enter class name (e.g. Intro to Computer Science): ";
            getline (cin,college_class[n].class_name);
            cout<<"Enter the term and year the class was/will be taken: ";
            getline (cin, college_class[n],term_year;
            cout<<"Enter whether or not this class is required for your major: ";
            getline (cin,college_class[n],is_required);
            cout<<"Enter any additional comments here: ";
            getline (cin, college_class[n],comments);
            cout<<"Would you like to enter another class?(y/n)";
            cin>>again;
        }
        while(again == 'y' || again == 'Y' && i<60)
    }

这是获取用户输入方面的正确方向吗?我的另一个问题是,如何将外部文件合并到这个中,以便用户输入的所有内容都存储到文件中?对不起,如果这有点模糊,我显然不是在寻找我的功课 - 我只是想找个方向来开始。

我知道在文本文件上写文看起来像这样,例如:

ofstream my file ("example");
if(myfile.is_open()))
{
   myfile <<"blah blah blah. \n";
   myfile.close();
}

...我只是不确定如何使结构数组的工作。

1 个答案:

答案 0 :(得分:1)

您的代码存在多处问题。 首先,您必须为college_class数组创建一个变量。 例如:

college_class myCollegeClass[60]

并在询问输入时使用它

getline (cin, myCollegeClass[n].term_year;)

你不小心在某些地方使用过逗号,请注意

此外,一个字符只能容纳一个字符,如果你想保存完整的类名,那就不够了,在结构中使用字符串。

struct college_class
{
   string class_name;
   ...
}

你在那里使用了一个嵌套循环,无论你是否说你不想输入任何其他内容,它都会重复你的问题60次。

我建议

int i=0;
char again = 'y';
while(again != 'n' && again != 'N' && i<60)
{
   ...
   i++
}

对于文件,在输入之后,只需循环访问myCollegeClass数组并将数据写入文件。例如:

myfile << myCollegeClass[i].class_name;