完成一个学业成绩跟踪项目,这是上个学期的期末项目。我没有在到期之前完成它,我正在尝试理解为什么有些函数没有按我希望的方式运行。
函数(searchCourse)用于搜索结构中的数组。如果找到匹配项,则应将所有结构成员打印给用户。我正在按课程alpha指示符(即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上找到。任何帮助都是非常感谢的。这是完成本项目的九个函数中的最后两个。如果我能弄清楚如何正确修复这个问题,那么下一个基本上是一样的。
提前谢谢。
发布于 2020-01-11 03:08:41
desig
不够大:它的必须容纳空终止符,也必须容纳。如果允许,请使用std::string
。如果不是,请选择足够大的数组,例如代码。在for
for ( int i = 0;…
course[ i ].courseName == desig
语句中,i
:比较两个指针<>e222>,而不是两个字符串。使用std::strcmp
:if ( 0 == strcmp( course[ i ].courseName, desig ) )...
。如果你切换到std::string
,你可以像以前一样使用比较。else
并在if
.中移动中断
欢迎来到SO,祝你好运!
发布于 2020-01-17 11:31:10
感谢所有人的回复。我显然是编程新手,这个项目教会了我很多东西。所有的答案都给了我一些思考的东西,我最终完成了我自己开始做的事情。无论如何,下面的代码是有效的。
void searchCourse(courses course[])
{
string desig;//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]
bool found = false;
cout << endl << "Enter course Alpha-Designator (Ex: CIT, DFIA, etc.): " << endl;//User prompt
cin >> desig;
cout << endl;//Terminal formatting
cout << left << setw(10) << "Course" << left << setw(25) << "Title" << setw(7) << "Hours" << "Grade" << endl << endl;
//Format info header
//begin for loop
for (int i = 0; i < courseArrayLength; i++)//For loop to process array
{
while (i < courseArrayLength)//While array processes...
{
if(strcmp(course[i].courseName, desig.c_str()) == 0) //If the value in course.courseName is equal to user 'desig'
{
found = true;//Boolean 'found' is set to true
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);
cout << course[i].courseHours << course[i].courseGrade << endl;
break;//Required since nested in while loop
}
else if(i < courseArrayLength)//Continue array process.
{
i++;
}
}
if(found == false)//If no courses found by user defined designator...
{
cout << "No courses by that designator." << endl;//Message to display if input 'desig' finds no matches.
break;
}
}
}
https://stackoverflow.com/questions/59685910
复制相似问题