Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在数组中搜索匹配结果和cout结构成员C++;_C++_Arrays_Struct_Char - Fatal编程技术网

C++ 在数组中搜索匹配结果和cout结构成员C++;

C++ 在数组中搜索匹配结果和cout结构成员C++;,c++,arrays,struct,char,C++,Arrays,Struct,Char,完成上学期作为期末项目要求的学业成绩跟踪计划。我没有在到期前完成它,我正在试图理解为什么有些函数没有按我希望的那样运行 函数(searchCourse)用于搜索结构中的数组。如果找到匹配项,则应将所有结构成员打印给用户。我正在按航向alpha指示器(即CIT)进行搜索。我已将一个包含三个CIT类的文件加载到程序中,当调用此函数时,无法识别它们。航向alpha指示器为字符数据类型。如果它是字符串类型并且在“for”循环中使用strcmp,这会更容易实现吗 //Prompts user to ent

完成上学期作为期末项目要求的学业成绩跟踪计划。我没有在到期前完成它,我正在试图理解为什么有些函数没有按我希望的那样运行

函数(searchCourse)用于搜索结构中的数组。如果找到匹配项,则应将所有结构成员打印给用户。我正在按航向alpha指示器(即CIT)进行搜索。我已将一个包含三个CIT类的文件加载到程序中,当调用此函数时,无法识别它们。航向alpha指示器为字符数据类型。如果它是字符串类型并且在“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;
        }
    }

}
//提示用户输入课程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;

cout
char 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等…)否则,做得很好。从新学期开始,我的程序已经尽我所能完成了,但如果有人感兴趣,请点击这里: