简体   繁体   English

数组C ++的Ofstream文本编写问题

[英]Ofstream Text Writing Issue with Arrays C++

Alright, so my infamous code project I've already had problems with twice has been largely reformatted. 好的,所以我臭名昭著的代码项目已经两次遇到问题,现在已经重新格式化。 Now, it looks like this: 现在,它看起来像这样:

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

using namespace std;


struct Course
{
    string name;
    double grade;
    int block;
};

Course enter_course()
{
    Course foo;

    cout << "What is the name of the course you wish to enter?\n";
    cin >> foo.name;
    cout << "What block is " << foo.name << " ?\n";
    cin >> foo.block;
    cout << "What is your current grade as a percent?";
    cin >> foo.grade;

    return foo;
}

void display_courses(Course courseList[10], int courseCount)
{
    for (int i=0; i<courseCount; i++){
        cout << i+1 << "\t" << courseList[i].name 
            << "\t\tBlock: " << courseList[i].block
            << "\tGrade: " << courseList[i].grade << "%" << endl;
    }
}

double get_gpa(Course courseList[10], int courseCount)
{
    double gradePoints;
    double total = 0.0;
    for (int i=0; i<courseCount; i++){
        if (courseList[i].grade < 100){
            gradePoints = 4;
        } 
        if (courseList[i].grade < 90){
            gradePoints = 3;
        }
        if (courseList[i].grade < 80){
            gradePoints = 2;
        }
        if (courseList[i].grade < 70){
            gradePoints = 1;
        }
        if (courseList[i].grade < 90){
            gradePoints = 0;
        }
        total += gradePoints;
    }

    return total*1.0/courseCount;

}

void fileOutput()   
{   
    ofstream outputFile;
    outputFile.open("userGrades.txt");
    outputFile << myCourses[10] << endl;
    outputFile.close();
    cout << "Grades saved to file!" << endl;
}

void display_options()
{
    cout << "1. Exit\n";
    cout << "2. Enter a Course\n"; 
    cout << "3. Display Courses\n";
    cout << "4. Display GPA\n";
    cout << "5. Request a text file output\n";

    cout << "\n\n";
}

int main()
{
    bool exit=0;
    int option;
    int courseCount=0;
    Course myCourses[10]; //nobody should ever take more than 10 courses! 

    while (exit == 0)
    {
        cout << "GradeBook 2.0\n";
        display_options();
        cout << "Enter a command.\n";
        cin >> option;

        switch (option)
        {
            case 1: 
                exit = 1;
                break;
            case 2:
                myCourses[courseCount] = enter_course();
                courseCount++;
                break;
            case 3:
                display_courses(myCourses, courseCount);
                break;
            case 4:
                cout << get_gpa(myCourses, courseCount) << endl;
                break;
            case 5:
                fileOutput();
                break;
        }
    }

    return 0;
}

However, at the fileOutput() function, I am experiencing these errors for the same line of code: 但是,在fileOutput()函数中,同一行代码遇到这些错误:

error C2065: 'myCourses' : undeclared identifier IntelliSense: identifier "myCourses" is undefined 错误C2065:“ myCourses”:未声明的标识符IntelliSense:未定义标识符“ myCourses”

The only thing I can make sense of is that I need to declare myCourses elsewhere, but I don't know how. 我唯一能理解的就是我需要在其他地方声明myCourses,但是我不知道如何。

Anyone think they can fix this? 有人认为他们可以解决此问题吗? If so, compile the code and see. 如果是这样,请编译代码并查看。 Also, the get_gpa function doesn't seem to be working right, if you can look at that as well. 另外,如果您也可以查看get_gpa函数,则该函数似乎工作不正常。

You have no ostream operator for your Course class, so you cant call that operator in this line: 您的课程类没有ostream运算符,因此您不能在此行中调用该运算符:

   outputFile << myCourses[10] << endl;

You could try deleting that line and putting in: 您可以尝试删除该行并放入:

display_courses(myCourses,courseCount)

But sadly that prints to cout . 但可悲的是打印到cout You thus really need to re-write display_courses to take a ostream& parameter and output to it, rather than cout . 因此,您确实需要重写display_courses以获取ostream&参数并将其输出,而不是cout

In your fileOutput function do the following: 在您的fileOutput函数中执行以下操作:

for (int i = 0; i < courseCount; i++)
 {
     outputFile << myCourses[i].name << " " << myCourses[i].grade << " " << myCourses[i].block << endl;

 }

outputFile.close();

Replace the " " with whatever you want to use to delimit the file contents. " "替换为要用来分隔文件内容的任何内容。

Alternatively you could investigate operator overloading and look at overloading the ofstream operator. 或者,您可以调查运算符重载,并查看ofstream运算符的重载。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM