如何编写函数并从main

时间:2015-07-08 23:42:52

标签: c++ arrays

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

using namespace std;


struct studentType 
{
    string studentFName[20];
    string studentLName[20];
    string studentData[20][3];
    int testscore[20][5];
    char grade[20];
};
studentType s;


int main() 
{
    int index;
    int maxindex;
    int maxindex1;
    int coldex;
    int coldex1;
    int totalscore[20];
    double avscore[20];
    double highscore;
    double highindivscore;

    maxindex = 0;
    maxindex1 = 0;
    coldex1 = 0;

    ifstream infile;

    infile.open("test.txt");    


    for(index = 0; index < 20; index++)
    {
        infile >> s.studentFName[index] >> s.studentLName[index] >> s.testscore[index][0] >> s.testscore[index][1] >> s.testscore[index][2] >> s.testscore[index][3] >> s.testscore[index][4];
        totalscore[index] = ((s.testscore[index][0]) + (s.testscore[index][1]) + (s.testscore[index][2]) + (s.testscore[index][3]) + (s.testscore[index][4]));
        avscore[index] = (static_cast<double>(totalscore[index])/5);


        if(avscore[index]<= 100)
        {
            s.grade[index] = 'A';
        }
        if(avscore[index]<= 89.9)
        {
            s.grade[index] = 'B';
        }
        if(avscore[index]<= 79.9)
        {
            s.grade[index] = 'C';
        }
        if(avscore[index] <= 69.9)
        {
            s.grade[index] = 'D';
        }
        if(avscore[index] <= 59.9)
        {
            s.grade[index] = 'F';
        }
    }
    for (index = 0; index < 20; index++)
    {
        cout << s.studentLName[index] << "," << " " << s.studentFName[index] << " " << s.testscore[index][0] << " " << s.testscore[index][1] << " " << s.testscore[index][2] << " " << s.testscore[index][3] << " " << s.testscore[index][4] << " " << s.grade[index] << endl;
    }
    cout << endl;

    for (index = 1; index < 20; index++)
        for (coldex = 0; coldex < 5; coldex++)
        {
            if (s.testscore[maxindex1][coldex1] < s.testscore[index][coldex])
            {
                maxindex1 = index;
                coldex1 = coldex;
            }
        }
    highindivscore = s.testscore[maxindex1][coldex1];

    for (index = 1; index < 20; index++)
    {
        if (avscore[maxindex] < avscore[index])
        {
            maxindex = index;
        }
    }
    highscore = avscore[maxindex];


    cout << s.studentFName[maxindex] << " " << s.studentLName[maxindex] << " Achieved The Highest Average Test Score Of A: " <<highscore <<endl;
    cout << s.studentFName[maxindex1] << " " << s.studentLName[maxindex1] << " " << s.testscore[maxindex1][coldex1] << endl;
    infile.close();

    system("pause");
    return 0;
}

这是家庭作业问题,我知道我做错了,这就是我需要帮助的原因。我如何进行主函数调用。我是新来的。我有这个实验室让我难过。作业读取(强调我的):

  

编写以下程序并进行测试以确保它们正常工作。请按照本书的指南或我的风格指南编写代码。编写一个程序,读取学生的姓名,然后是给定输入文件中的考试成绩。程序应输出到文件output.txt,每个学生的名字后跟测试分数和相关等级。学生数据应存储在StudentType类型的结构变量中,该变量有四个组件:studentFName和studentLName类型为string ,int类型的testScore和char类型的等级。假设班上有20名学生。使用类型为StudentType的20个组件的数组。您的程序必须至少包含以下功能:

     
      
  1. 将学生的数据读入数组的功能。
  2.   
  3. 为每位学生分配相关成绩的功能。
  4.         

    你的程序应该以这种形式输出每个学生的名字:姓氏后跟一个逗号,后跟一个空格,后跟第一个名字;名称必须左对齐。 此外,除了声明变量并打开输入和输出文件之外,函数main应该只是函数调用的集合。

2 个答案:

答案 0 :(得分:1)

这称为重构。我想对于作业,你想将主要内容中的所有内容移动到各个函数中。您可以剪切并粘贴整个main主体并将其移动到一个函数并在main中调用它。我并不认为这是作业的重点。

相反,请阅读主要和分离/提取程序。你应该将main分成一个函数来处理一件事,即处理输入/输出,循环,检查一些变量并返回一个字母等。这些变化不仅使程序更容易理解并回到以后,而且还使重用整个程序中重复的过程要容易得多。

答案 1 :(得分:1)

您的代码在逻辑上看起来很合理并且应该可以正常工作,但是,您的作业要求您实际上是以良好的风格编写代码并将程序的各个部分分离为函数。

基本上,作为一个简单的修复,只需将代码中执行类似操作的不同部分放入void函数中。例如,这个cpp段:

void function1();
void function2();
void function3();

void main(){
    function1();
    function2();
    function3();
    return 0;
}

void function1(){
    // Your code. Ex: Some large algorithm.
}

void function2(){
    //More code, for a different algorithm. Maybe some input or output.
}

void function3(){
    //The final code you want the program to execute.
}

然后传递参数并根据需要调整返回类型。它使代码更容易理解,特别是如果您拥有以gradingLogic()studentOutput()为基础命名的函数。