【发布时间】:2020-04-28 08:29:09
【问题描述】:
完成上学期要求作为期末项目的学业成绩跟踪计划。我没有在它到期之前完成它,我试图理解为什么某些功能没有按我希望的那样运行。
函数 (searchCourse) 旨在搜索结构中的数组。如果找到匹配项,则应将所有结构成员打印给用户。我正在按课程字母代号(即 CIT)搜索。我已经将一个包含三个 CIT 类的文件加载到程序中,并且在调用此函数时,它们无法识别。课程 alpha 指示符是 char 数据类型。如果它是字符串类型并在“for”循环中使用 strcmp,这会更容易完成吗?
//Prompts user to enter course alpha designator for comparison purposes.
void searchCourse(courses course[])
{
char desig[3];//User inputs course alpha designator to compare within loop
//Assigned array value of 4 since strcmp requires 'desig' to have a size for comparison to course[i]
int i;//Location / loop counter
cout << endl << "Enter course Alpha-Designator (Ex: CIT, DFIA, etc.): " << endl;//User prompt
cin >> desig;
//Set course info headings
cout << endl;
cout << left << setw(10) << "Course" << left << setw(25) << "Title" << setw(7) << "Hours" << "Grade" << endl << endl;
//begin for loop
for (i = 0; i < courseArrayLength; i++)
{
if(course[i].courseName == desig) //If the value in course.courseName is equal to user 'desig'
//Have to use strcmp function when comparing c-strings in array.
//I tried to use the example in CH.8-2 and apply it here.
{
cout << left << setw(4) << course[i].courseName << left << setw(6) << course[i].courseNum;//Print info formatting
cout << left << setw(25) << course[i].courseTitle << left << setw(7) << course[i].courseHours << course[i].courseGrade << endl;
}
else
{
cout << "No courses by that designator.";//Message to display if input 'desig' finds no matches.
break;
}
}
}
如果有人愿意,完整的程序代码在 github 上。任何帮助表示赞赏。这是完成此项目的九个功能中的最后两个。如果我能对如何正确修复这个问题有所了解,那么下一个基本上是相同的。
提前致谢。
【问题讨论】:
-
char desig[3];对于CIT和DFIA来说都太短了(不管是什么意思)。为什么不使用std::string?此外,对于char[],运算符==永远不会返回true,除非您与完全相同的数组进行比较(不是一个内容相同的数组,内存中的相同地址)。 -
searchCourse()的参数是否有 是 C 样式的数组?不可以是std::vector吗?courseArrayLength来自哪里?这不是您的功能的输入。 -
尽量减少示例并查看上面发布的链接@eerorika
-
如果
if(course[i].courseName == desig)中的courseName是char *而不是std::string,则不能将相等性与==进行比较,这将导致未指定的行为 --您应该收到警告。如果您不能使用std::string,您可以使用if (strcmp (course[i].courseName, desig) == 0)。将<cstring>包含在strcmp中。