【问题标题】:How do I search through an array?如何搜索数组?
【发布时间】:2013-11-08 14:47:48
【问题描述】:

对于我的作业,我必须创建一个允许用户输入学生信息(ID、DOB 和电话号码)的结构。这样做很简单,我没有问题。现在我需要使用学生 ID 搜索输入信息以显示学生对应的 DOB 和电话号码,这是我无法解决的问题。如果您发现我的程序有任何其他问题,请告诉我哪里出了问题以及为什么我应该更改,以便我可以从错误中吸取教训。

我也不确定如何将学生信息的所有这些不同部分存储到一个数组中并让它们相互对应。因此,当我搜索 ID 时,它如何知道返回正确的 DOB 和电话。我真的在这里迷路了,需要一些帮助。你告诉我什么或者如果你给我代码,请解释为什么我应该做你告诉我做的事情。

注意:我所有的课程都是在线的,因此向我的教授寻求帮助是一个挑战,所以我向你们寻求帮助。

#include <stdio.h>
#include <stdlib.h>

struct infoStruct 
{
    int studentID;
    int year;
    int month;
    int day;
    int phone;
    int end;
};

int main (void)
{
    int students = 0;   
    int infoArray [students];
    struct infoStruct info;
    int studentID;
    int year;
    int month;
    int day;
    int phone;
    int end;



    while (info.end != -1) {
        students = students + 1;
        printf("Enter student information (ID, day, month, year, phone)\n");
        printf("Enter -1 following the phone number to end the process to continue enter 0\n");
        scanf("%d %d %d %d %d %d", &info.studentID, &info.day, &info.month, &info.year, &info.phone, &info.end);
    }
    if (info.end = -1){
        printf("You entered %d student(s)\n", students);
    }
    //Student Search
    printf("Please enter the student ID of the student your looking for\n.");
    scanf("%d", info.studentID);
    printf(" DOB: %d %d %d, Phone: %d", info.month, info.day, info.year, info.phone);

}

【问题讨论】:

  • 好吧,您可以使用该 infoArray,但将其设为 infoStruct,不确定它是否只是拼写错误,但您不会在结构定义周围遗漏一些括号吗?当您拥有该数组时,您可以轻松地循环遍历它...
  • @DusanPlavak 所以应该是 infoStruct infoArray [students]; ?
  • 在编写 C 代码之前请阅读 C 教程。代码确实看起来你没有读过。
  • 另外,您可以做的是尝试真正理解人们在这里告诉您的内容,而不是仅仅再次问同样的问题(就像您所做的那样!)并等待有人给您您的代码可以复制/粘贴。

标签: c arrays database loops


【解决方案1】:

我需要更好地阅读你想要做的事情,但是,为了简化你的代码,对于阅读它的人来说,不要把所有的东西都写在你的 main 中并在函数中分开。之后,您可以调用该函数,并使用它们的名称来增加对程序的理解。

【讨论】:

  • 尝试创建一个名为 searchStudent(...) 的函数。首先,您需要知道数组的大小以创建 for 循环。现在,您将向用户询问您的学生证。在 for 循环中,您将选择的 id 与数组的每个 id 学生进行比较。当你找到你想要的学生 id 时,如果是数组,就在那个位置打印你想要的东西。我希望我能帮忙
  • 如何将用户输入存储到数组中?
  • 例如 printf("Isert id:"); scanf("%d", &x);之后,你选择你的位置,你会做 nameOfStruct[position].id=x;有了这个,你在 id 参数中写入你在 x 中的内容。
【解决方案2】:

首先要注意...

您初始化students = 0,然后将称为infoArray 的整数数组的大小设置为0。这就是int infoArray[students] 所做的。

接下来,您不需要初始化结构中的每个元素,因为这就是结构的用途。简单地说struct infoStruct info; 就可以了。不要忘记,如果您使用的是指针(即struct infoStruct *info),则需要使用 malloc 为该结构分配内存。

但是,要设置一个结构数组,只需 1 行简单的代码: struct infoStruct info[x] x 是您希望创建多大的数组。请记住,如果您像上面那样将 x 设置为 0 并尝试向数组中添加一个元素,您将得到一个 segFault,因为尚未为其分配内存。

最后,您现在可以使用 for 循环搜索该数组。

【讨论】:

  • @user2172993 没问题。如果答案是正确的,请点击它旁边的复选标记。 :)
【解决方案3】:

好的,所以您需要使用学生 ID 搜索 infoArray。 首先,我认为您希望您的数组为infoStruct 类型(代表学生)。 students 是数组的元素个数。

//storing the student info
for (int i=0;i<students;++i)
{
  scanf("%d %d[...]",&infoArray[i].studentID, &infoArray[i].year[...]);
}

假设您正在搜索 ID 为 id1 的学生。 你可以这样做:

for (int i=0;i<students;++i)
{
  if (infoArray[i].studentID==id1)
  printf("%d",infoArray[i].phone);
}

我不确定我是否理解你的问题,但我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多