#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define RECORDS 10
以下功能是我要求帮助的。
static char searchforRecordbystate(char input[3])
{
for / while / if loop
搜索struct array members
如果找到匹配
返回(打印)找到匹配项的整个结构
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。并且州成员中不会有重复数据。希望这会让这更容易。
答案 0 :(得分:3)
如何编写搜索函数以在结构中查找匹配项 array和return(printf)匹配的整个struct?
创建一个能够漂亮打印结构的函数:
void CustomerPrint(const Customer *toPrint) {
...
}
创建一个搜索函数,迭代数组,比较给定的参数:
Customer *CustomerFind(const char *name) {
...
}
通过调用CustomerFind
连接两个功能块,如果结果不是NULL
则调用CustomerPrint
功能。
当然接口只是提案,可能会被更改。如果您对提案的细节有任何疑问,请发表评论,如果您愿意,我会详细解释。
其他想法
在重读我的帖子时,我意识到我在上述提案中做出的一些决定无论如何都需要解释:
在 CustomerPrint 中,指针是`const?因为此函数不会修改结构的任何字段。因此,我们告诉编译器我们不会改变任何东西。
CustomerFind 应该包含所有可搜索字段的参数。 (所以鼓励你扩展签名)我建议用指针取所有“比较”值,并让调用者指出那些与搜索无关的指针NULL
。 (例如,如果您有name
和city
,则可以将city
设为NULL,以便仅搜索name
的第一次出现。
函数本身遍历记录数组并比较非NULL
的字段。如果找到一个,它返回指向该元素的指针(return &(myRecords[n]);
)。如果函数到达数组的末尾,它将返回NULL
以指示没有匹配的记录。
如果您想要“搜索 - 搜索下一步”功能,还可以引入一个概念。如果你对这个概念感兴趣,请告诉我。
答案 1 :(得分: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()
是读者的练习。