保存为cout显示的所有输入 - C ++

时间:2017-07-08 23:21:15

标签: c++

我看过论坛,但似乎找不到任何具体到我需要的东西。

我正在编写一个程序,要求用户输入一些学生。根据他们输入的学生人数,他们必须输入学生姓名和一系列10个成绩,或按999取消。该程序稍后将显示所有输入的学生的平均成绩。我现在只是覆盖了之前的输入并显示最后输入的内容。

这是我到目前为止所做的:

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


int main() {

std::string teacherName = "";
std::string classDesignation ="";
int numStudents = 0;
std::string studentName = "";
double grade[10];
double  averageGrade = 0.00;
char letterGrade;

std::cout << "Enter the teacher's name: ";
getline(std::cin, teacherName);

std::cout << "Enter the class designation: ";
getline(std::cin, classDesignation);

std::cout << "Enter the number of students ( 1 or more ): ";
std::cin >> numStudents;
std::cin.ignore();

for (int x = 0; x <= numStudents - 1; x++) {
    std::cout << "Enter the student's name: ";
    getline(std::cin, studentName);

    for (int i = 0; i <= 9; i++) {
        std::cout << "Enter grade from 0 - 100 or 999 to stop: ";
        std::cin >> grade[i];

        if (grade[i] == 999){
            break;
    }
        averageGrade += grade[i];

        if (averageGrade <= 59){
            letterGrade = 'F';
        }
        if (averageGrade >= 60 || averageGrade <= 69){
            letterGrade = 'D';
        }
        if (averageGrade >= 70 || averageGrade <= 79){
            letterGrade = 'C';
        }
        if (averageGrade >= 80 || averageGrade <= 89){
            letterGrade = 'B';
        }
        if (averageGrade > 90){
            letterGrade = 'A';
        }
    }
}

std::cout << "Teacher: " << teacherName << std::endl;
std::cout << "Class: " << classDesignation << std::endl;
std::cout << "Student Name: " << studentName;
std::cout << std::setw(19) << "Average: " << averageGrade;
std::cout << " Grade: " << letterGrade << std::endl;
std::cout << "Student count: " << numStudents << std::endl;
std::cout << "Student average: " << std::endl;
std::cout << "A's: " << std::endl;
std::cout << "B's: " << std::endl;
std::cout << "C's: " << std::endl;
std::cout << "D's: " << std::endl;
std::cout << "F's: " << std::endl;

return 0;
}

任何提示?

谢谢!

2 个答案:

答案 0 :(得分:0)

@Hansel,这是我认为可行的。我们将更改此行以获得我们想要的内容:

averageGrade += grade[i];

要:

//to declarations:
double  averageGradeSum = 0.00;
//then change the line mentioned before to:
averageGradeSum += grade[i];

然后:

//if for some reason you're indexing starts at 1
averageGrade = averageGradeSum/i; 
//if indexing starts at 0 like usual C++ use: 
averageGrade = averageGradeSum/(i+1);

我不打算测试这个。它应该是有道理的,如果我搞砸了语法,它应该是一个简单的谷歌冒险修复。享受:)

答案 1 :(得分:0)

从我看到的,你可以将它们存储在关联向量中,一个用于学生姓名,一个用于平均成绩。您还可以拥有一个双向链接的学生节点列表,如下所示:

struct student
{
    std::string student_name;
    int ave_grade;
    // Head points to the previous student in the array.
    // Tail points to the next student in the array.
    student *head;
    student *tail;
}

声明一个结构,一切都挂起以防止内存泄漏:student list_head;并且每次有输入时,将新节点添加到列表中。