关于我的C ++家庭作业设计的问题

时间:2011-09-17 00:07:13

标签: c++

首先,这是我的CS296类,所以一切都必须在main()函数中,除了循环,开关和if语句之外我不能使用任何东西。

无论如何,该程序要求用户输入班级中的学生人数,然后输入他们的姓名。然后根据学生按字母顺序从A-Z排列,显示哪个学生应该在该行的前面,哪个学生应该在该行的后面。

该程序运行,但我觉得设计很差。特别是我如何使用count变量。我希望可能会得到一些反馈。谢谢!

int main(void)
{
    string front, back, student;
    unsigned short count = 1, students;

    cout << "Enter the number of students in the class. Valid range is 1 - 25." << endl
         << endl
         << "Students: ";
    cin  >> students;

    while (students < 1 || students > 25)
    {
        cout << endl
             << "ERROR: Valid range is 1 - 25" << endl
             << endl
             << "Students: ";
        cin  >> students;
    }

    cout << endl
         << "Enter the name of student " << count << ": ";
    cin.ignore();
    getline(cin, student);

    front = back = student;

    for (count = 2; count <= students; count++)
    {
        cout << "Enter the name of student " << count << ": ";
        getline(cin, student);

        if (student < front)
            front = student;
        else if (student > back)
            back = student;
    }

    cout << endl
         << front << " should be at the head of the line." << endl
         << back  << " should be at the end of the line."  << endl;

    return 0;
}

3 个答案:

答案 0 :(得分:6)

不,这似乎很好。规范要求输入一个计数,然后进入那么多学生,这正是你所做的。

不要误解我的意思,程序很糟糕,但这是因为像“一切都必须在main()函数中”这样荒谬的规范,而不是与你的实现有关。 / p>

对于这个级别的家庭作业,我很高兴从我的学生那里得到类似的东西。它会从甚至没有编译的代码,到处都是单字符变量名,或者没有格式化的错误缩进和混合标签/空格的混乱中做出很好的改变: - )

答案 1 :(得分:1)

从算法的角度来看,对我来说似乎是一个非常合理的设计。当你正在阅读列表时,你只是找到列表的最小值和最大值,并且得到了正确的部分(首先初始化,最后一个初始化为第一个元素)。你可以使用do-while来使它有点好看:

做{     //读入,比较max,min   }   而(计数<25)

答案 2 :(得分:1)

鉴于您只存储了两名学生,因此没有特别需要将条目数限制为25个。如果用户(您)想要添加超过25个名称,除了验证号码外,不需要进行任何更改。实际上,没有明显的理由让用户计算学生人数;代码可以继续阅读学生,直到cin达到EOF。但是,如果规范说“你要输入名字的数量”,那么你的代码必须这样做,不管多么愚蠢。但是如果用户只输入3个名字而不是20个承诺的名字,你应该允许早期EOF并优雅地终止循环。

不幸的是,你不能使用自己的功能;您可以使用一个来提示并阅读下一个名称,从而减少代码中的重复。

鉴于这些限制,您的代码是合理的。您可以避免在循环内部进行更复杂的检查,从而避免“在循环外读取名字”。权衡可能有利于你所写的内容。