C++ 在数组中搜索匹配结果和cout结构成员C++;
完成上学期作为期末项目要求的学业成绩跟踪计划。我没有在到期前完成它,我正在试图理解为什么有些函数没有按我希望的那样运行 函数(searchCourse)用于搜索结构中的数组。如果找到匹配项,则应将所有结构成员打印给用户。我正在按航向alpha指示器(即CIT)进行搜索。我已将一个包含三个CIT类的文件加载到程序中,当调用此函数时,无法识别它们。航向alpha指示器为字符数据类型。如果它是字符串类型并且在“for”循环中使用strcmp,这会更容易实现吗C++ 在数组中搜索匹配结果和cout结构成员C++;,c++,arrays,struct,char,C++,Arrays,Struct,Char,完成上学期作为期末项目要求的学业成绩跟踪计划。我没有在到期前完成它,我正在试图理解为什么有些函数没有按我希望的那样运行 函数(searchCourse)用于搜索结构中的数组。如果找到匹配项,则应将所有结构成员打印给用户。我正在按航向alpha指示器(即CIT)进行搜索。我已将一个包含三个CIT类的文件加载到程序中,当调用此函数时,无法识别它们。航向alpha指示器为字符数据类型。如果它是字符串类型并且在“for”循环中使用strcmp,这会更容易实现吗 //Prompts user to ent
//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;
}
}
}
//提示用户输入课程alpha指示符以进行比较。
无效搜索课程(课程[])
{
char desig[3];//用户输入要在循环内进行比较的课程alpha指示符
//分配的数组值为4,因为strcmp要求“desig”具有与课程[i]比较的大小
int i;//位置/循环计数器
cout
desig
不够大:它也必须容纳空终止符。如果允许,请使用std::string
。如果不允许,请选择足够大的数组,例如char desig[1024]
- 在
for
语句中声明计数器变量i
,for(int i=0;…
course[i].courseName==desig
比较两个指针,而不是两个字符串。使用:if(0==strcmp(course[i].courseName,desig))…
。如果切换到std::string
,则可以像以前一样使用比较
- 您过早地中断循环:当您找到第一个不匹配的课程时(您可能会在以后找到)。您可能希望在找到第一个匹配的课程后中断循环:删除
else
,如果,则将中断移动到内部
欢迎来到SO,祝你好运!感谢大家的回复。我显然是编程新手,这个项目教会了我很多东西。所有的答案都让我思考了一些事情,我最终完成了我自己开始做的事情。不管怎样,下面的代码是有效的
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;
}
}
}
无效搜索课程(课程[])
{
string desig;//用户输入要在循环内比较的课程alpha指示符
//分配的数组值为4,因为strcmp要求“desig”具有与课程[i]比较的大小
bool-found=false;
coutchar desig[3];
对于CIT
和DFIA
(无论它们是什么意思)来说都太短了。为什么不使用std::string
?另外,对于char[]
操作符==
来说,除非与完全相同的数组进行比较,否则它永远不会返回true
(不是一个内容相同、内存中地址相同的文件)。创建一个用于searchCourse()的参数
必须是C型数组?它不允许是std::vector
?courserraylength
从何而来?它不是函数的输入。尽量减少示例,并查看if(course[i].courseName==desig)中发布的链接@eerorika
是char*
而不是std::string
,您不能将相等性与=
进行比较,这将导致未指定的行为,对此您应该得到警告。您可以使用if(strcmp(课程[i]。课程名称,设计)==0)
如果你不能使用std::string
。包括
用于strcmp
。只有这一点是对OP的警告,如果他们在嵌入式系统上,desig[1024]
对于系统来说可能太大(在普通桌面上,那么1024/2048
就可以了)。许多大学现在都在使用微控制器进行教学(如TI MSP432等…)否则,做得很好。从新学期开始,我的程序已经尽我所能完成了,但如果有人感兴趣,请点击这里: