关于我的c++作业设计的问题

Question about my design for my C++ homework

本文关键字:作业 问题 c++ 于我的 我的      更新时间:2023-10-16

首先,这是我的CS296类,所以所有东西都必须在main()函数中,我不能使用循环,switch和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;
}

不,看起来很好。规范要求输入一个计数,然后输入那么多学生,你就是这么做的。

不要误解我的意思,程序很糟糕,但这是因为荒谬的规范,如"所有东西都必须在main()函数中",与你的实现无关。

对于这种水平的家庭作业,我很乐意从我的学生那里得到这样的东西。这将是一个很好的改变,从代码甚至不能编译,单字符变量名无处不在,或未格式化的沼泽不正确的缩进和混合制表符/空格:-)

从算法的角度来看,这似乎是一个非常合理的设计。你只是在读取列表时找到列表的最小值和最大值,并且正确地完成了最难的部分(初始化第一个元素的first和last)。你可以使用do-while让它看起来更漂亮,像这样:

做{//读取,比较max, min}While (count <25)

假设只存储两个学生,没有必要将条目的数量限制为25个。如果用户(您)想要添加超过25个名字,除了验证号码之外,不需要进行任何更改。事实上,没有明显的理由让用户计算学生的数量;代码可以一直读取学生,直到到达cin上的EOF。然而,如果规范说"你应该输入名称的数量",那么你的代码就必须这样做,无论多么愚蠢。但是如果用户只输入了3个名字,而不是承诺的20个,您应该允许提前EOF并优雅地终止循环。

很遗憾,您不能使用自己的函数;您可以使用一个来提示并读取下一个名称,从而减少代码中的重复。

给定这些约束,您的代码是合理的。您可以避免"在循环外读取名字",但代价是在循环内进行更复杂的检查。这种权衡可能更有利于你所写的内容。