如何匹配struct数组中的varible,然后匹配位置

时间:2017-11-24 04:38:56

标签: c arrays struct

首先发布在这里。编码也有点新鲜。

现在我停了下来。我需要做的是从一个雇员id的用户那里获得输入,然后在struct数组变量中找到它,并继续询问,直到输入正确的一个...所有在do-while循环中。然后我需要打印该员工的薪水并将其更新为新的。

我很难弄清楚如何在struct数组中搜索该员工ID,然后在完成后,保存struct array的位置,这样我就可以打印员工薪水,然后将其更新为别的什么。

下面是一些代码来显示struct array

case 3: //Update Employee
        printf("Update Employee Salary\n");
        printf("======================\n");
        int employid;
        do{
            printf("Enter Employee ID: ");
            scanf("%d", &employid);

        }while(employid != emp->id[SIZE]);

    printf("The current salary is %lf", emp->salary[SIZE]);
        break;

这里有一些显示我已完成的代码

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
    new callApi().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, location);
} else {
    new callApi().execute(location);
}

我知道这是错的。 While只是查看当前位置,而printf只打印当前阵列员工的工资。

任何帮助都将不胜感激。

加成: 注意当我分配/使用我的结构时,我必须输入“ - >”实际告诉我的编译器我指向结构中的特定变量。通常我把“。”并且不知道为什么我需要把 - > ..我刚刚在线找到了修复程序。

通常它会是“emp.id [SIZE];”

NOT“emp-> id [SIZE];”

有人有什么想法吗?

全部谢谢

1 个答案:

答案 0 :(得分:0)

考虑到您对结构的输入是正确的,您可以做的事情很少。

  • 问题是你需要意识到你需要一个while/for循环来迭代雇员数组。

  • 第二件事是,在这里你没有正确比较它。您只是与第一个元素进行比较。

现在你可以做的是

    bool found = false;
    int foundEmpId = -1;
    do{
        printf("Enter Employee ID: ");
        scanf("%d", &employid);
        for(size_t i = 0; i< SIZE; i++)
            if( emp[i].id == employid ){
                foundEmpId = employid;
                found = true;
                break;
            }
    }while(!found);
    // do your work.

现在这只是O(n)搜索。

除此之外,您可以在我的代码中看到一件事。我正在使用emp[i].id。这里我考虑的结构是

struct employee{
 int id ; 
 int age;
 double salary;
};

如果您想到员工,这些是您需要在此处添加的属性。你所做的是与不同的群体员工合作。

在这里你会像这样工作

struct employee emps[SIZE];

...
...

// the attributes of employee will be inputted like this
// if( scanf("%d",&emps[i].id) == 1 ) { /* */ }
...

为什么在这里需要emp->id[SIZE]

解析emp->id[SIZE]相当于(*emp).id[SIZE]或更精确emp[0].id[SIZE]

总结问题/建议: -

  • P 您显示的代码部分表明您没有与所有员工进行比较。

  • P 您已创建了一组员工。但您不是在迭代或使用所有组。您刚刚参加了第一个员工小组。

  • S 您应该只使用一组员工,而不是使用员工组数组。或者即使你使用了一组enployess,那么只需要一个组即可。