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

下面的功能是我寻求帮助的功能。

static char searchforRecordbystate(char input[3])
{   

for/while/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。并且在状态成员中不会有重复的数据。希望这会使这更容易。

4

2 回答 2

3

我将如何编写一个搜索函数来查找结构数组中的匹配项并返回(printf)它匹配的整个结构?

  1. 在函数外部声明结构数据类型,使其对整个模块“可见”。
  2. 创建一个能够漂亮打印结构的函数:

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

  3. 创建一个搜索函数,通过比较给定参数的数组进行迭代:

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

  4. 通过调用连接两个功能块CustomerFind,以防结果不NULL调用该CustomerPrint函数。

当然,接口只是建议,可能会更改。如果您对提案的详细信息有任何疑问,请发表评论,如果您愿意,我会非常详细地解释。

额外的想法

在重读我的帖子时,我意识到我在上述提案中做出的一些决定无论如何都需要解释:

CustomerPrint中,所采用的指针是 `const? 因为这个函数不会修改结构的任何字段。因此我们告诉编译器我们不会改变任何东西。

CustomerFind应该有所有可搜索字段的参数。(因此鼓励您扩展签名)我建议通过指针获取所有“比较”值,并让调用者那些NULL与搜索无关的指针。(例如,如果您有name并且city您可以保留cityNULL 以便仅搜索name.

该函数本身遍历记录数组并比较不是的字段NULL。如果找到一个,它会返回指向该元素的指针 ( return &(myRecords[n]);)。如果函数到达数组的末尾,它将返回NULL以指示没有匹配的记录。

如果您想拥有“搜索 - 搜索下一个”功能,还可以引入一个概念。如果您也对此概念感兴趣,请告诉我。

于 2013-02-23T07:12:15.033 回答
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()是读者的练习。

于 2013-02-23T07:17:20.400 回答