首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >匹配结果的搜索数组和cout结构成员C++

匹配结果的搜索数组和cout结构成员C++
EN

Stack Overflow用户
提问于 2020-01-11 00:56:14
回答 2查看 98关注 0票数 0

完成一个学业成绩跟踪项目,这是上个学期的期末项目。我没有在到期之前完成它,我正在尝试理解为什么有些函数没有按我希望的方式运行。

函数(searchCourse)用于搜索结构中的数组。如果找到匹配项,则应将所有结构成员打印给用户。我正在按课程alpha指示符(即CIT)进行搜索。我已经将一个包含三个CIT类的文件加载到程序中,当调用此函数时,它们无法识别。课程alpha指示器为char数据类型。如果它是字符串类型并在'for‘循环中使用strcmp,这是否更容易实现?

代码语言:javascript
运行
复制
//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上找到。任何帮助都是非常感谢的。这是完成本项目的九个函数中的最后两个。如果我能弄清楚如何正确修复这个问题,那么下一个基本上是一样的。

提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2020-01-11 03:08:41

  • desig不够大:它的必须容纳空终止符,也必须容纳。如果允许,请使用std::string。如果不是,请选择足够大的数组,例如代码。在for for ( int i = 0;…
  • course[ i ].courseName == desig语句中,
  • 声明计数器变量i :比较两个指针<>e222>,而不是两个字符串。使用std::strcmpif ( 0 == strcmp( course[ i ].courseName, desig ) )...。如果你切换到std::string,你可以像以前一样使用比较。
  • :当你找到第一个不匹配的课程时,你可能会发现它。一旦找到第一个匹配项,您可能想要中断循环:删除else并在if.

中移动中断

欢迎来到SO,祝你好运!

票数 1
EN

Stack Overflow用户

发布于 2020-01-17 11:31:10

感谢所有人的回复。我显然是编程新手,这个项目教会了我很多东西。所有的答案都给了我一些思考的东西,我最终完成了我自己开始做的事情。无论如何,下面的代码是有效的。

代码语言:javascript
运行
复制
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;
        }  
    } 
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59685910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档