C:我怎么会写一个搜索功能来寻找一个结构阵列匹配,并返回(打印),整个struct它是否匹配?(C:

2019-10-17 17:41发布

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define RECORDS 10  

下面的功能是什么,我要求有帮助。

static char searchforRecordbystate(char input[3])
{   

为/而/ if循环

搜索结构阵列成员

如果发现匹配

回报(打印),在那里找到匹配的整个结构

    return 0;
}   

主要功能 - 有史以来第一次使用指针,(Xcode不是与它抱怨设置为尽可能严格),但大家都欢迎的抱怨,尤其是如果我想提出一个巨大的监督。

int main() {
    typedef struct {
        char *firstName[RECORDS];
        char *lastName[RECORDS];
        char *street[RECORDS];
        char *city[RECORDS];
        char *state[RECORDS];
        int *zip[RECORDS];
        char *phone[RECORDS];
        int *accountId[RECORDS];
    } Customer ;    

    typedef int records;
    records i = 0;  

阵列循环数据输入

    Customer custArray[RECORDS];
    printf("================================================================\n");
    for(i = 0; i < RECORDS; ++i)
    {
        printf("Enter data for customer %d\n", i + 1);
        printf("Enter firstname, last name, phone\n");
        scanf("%s %s %s", *custArray[i].firstName, *custArray[i].lastName, *custArray[i].phone);
        printf("Enter Address (Street City State ZIP)");
        scanf("%s %s %s*c %d", *custArray[i].street, *custArray[i].city, *custArray[i].state, *custArray[i].zip);
        break;
    }
    char input[3];
    printf("Enter in state to search for customer a customer record:\n");
    scanf("%s", input); 


    searchforRecordbystate(input);  

}   

没有错误检查必要的,只是想爬进此刻学习C。 而且不会有在成员国重复数据。 希望这是更容易些。

Answer 1:

我怎么会写一个搜索功能来查找匹配的结构阵列和返回(printf的)整个struct它是否匹配?

  1. 声明函数外的结构数据类型所以它的“可见”整个模块。
  2. 创建一个功能即能漂亮地打印一个结构:

    void CustomerPrint(const Customer *toPrint) { ... }

  3. 创建通过数组比较给定参数迭代搜索功能:

    Customer *CustomerFind(const char *name) { ... }

  4. 通过调用连接两个功能块CustomerFind并且如果结果不是NULL调用CustomerPrint功能。

当然,接口仅仅是建议,并有可能被改变。 如果你有关于该提案的细节发表评论任何问题,如果你愿意,我会解释的很详细。

更多的想法

虽然重读我的帖子,我意识到,我的一些决定,我在上述提案提出需要一个交代呢:

CustomerPrint采取的指针是'常量? 因为这个功能是不会改变结构的任何领域。 因此,我们说,我们都不会改变任何事情的编译器。

CustomerFind有望对所有搜索域参数。 (所以你鼓励延长签字)我会建议由指针全部采取“比较”值,让呼叫者这些指针是NULL这是不相关的搜索。 (例如,如果你有namecity ,你可以离开city NULL,以仅搜索第一次出现的name

该函数本身通过记录的阵列中运行,比较不属于域NULL 。 在情况下,它找到一个,它返回指针到该元件( return &(myRecords[n]); )。 如果函数涉及到数组的结尾,它会返回NULL ,表示没有匹配的记录。

还有,如果你想拥有你可以引入一个概念“搜索 - 搜索未来”的能力。 让我知道如果你是在为一个概念intrested了。



Answer 2:

typedef struct {
    char firstName[NAMEMAX];
    char lastName[NAMXMAX];
    char street[STREETMAX];
    char city[CITYMAX];
    char state[STATEMAX];
    int  zip;
    char phone[PHONEMAX];
    int  accountId;
} Customer ;

Customer Customers[RECORDS];  

static int searchforRecordbystate(char input[]) {
  for (int i = 0; i < RECORDS; i++) {
    if (strcmp(input, Customers[i].state) == 0) {
      printCustomer(Customers[i]);
      return i;
    }
  }
  return -1; // Not found
}

写作printCustomer()是读者的练习。



文章来源: C: how would I write a search function to look for a match in a struct array, and return (print) the entire struct it matched?