首先,这是我的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;
}
答案 0 :(得分:6)
不,这似乎很好。规范要求输入一个计数,然后进入那么多学生,这正是你所做的。
不要误解我的意思,程序很糟糕,但这是因为像“一切都必须在main()函数中”这样荒谬的规范,而不是与你的实现有关。 / p>
对于这个级别的家庭作业,我很高兴从我的学生那里得到类似的东西。它会从甚至没有编译的代码,到处都是单字符变量名,或者没有格式化的错误缩进和混合标签/空格的混乱中做出很好的改变: - )
答案 1 :(得分:1)
从算法的角度来看,对我来说似乎是一个非常合理的设计。当你正在阅读列表时,你只是找到列表的最小值和最大值,并且得到了正确的部分(首先初始化,最后一个初始化为第一个元素)。你可以使用do-while来使它有点好看:
做{ //读入,比较max,min } 而(计数<25)
答案 2 :(得分:1)
鉴于您只存储了两名学生,因此没有特别需要将条目数限制为25个。如果用户(您)想要添加超过25个名称,除了验证号码外,不需要进行任何更改。实际上,没有明显的理由让用户计算学生人数;代码可以继续阅读学生,直到cin
达到EOF。但是,如果规范说“你要输入名字的数量”,那么你的代码必须这样做,不管多么愚蠢。但是如果用户只输入3个名字而不是20个承诺的名字,你应该允许早期EOF并优雅地终止循环。
不幸的是,你不能使用自己的功能;您可以使用一个来提示并阅读下一个名称,从而减少代码中的重复。
鉴于这些限制,您的代码是合理的。您可以避免在循环内部进行更复杂的检查,从而避免“在循环外读取名字”。权衡可能有利于你所写的内容。