C 在结构中输入编号-检查该编号是否已存在于文件中

C 在结构中输入编号-检查该编号是否已存在于文件中,c,struct,eclipse-cdt,C,Struct,Eclipse Cdt,我正在尝试编写一个数据验证函数,其中ID号必须是结构数组中的唯一数字。每次我试图保存一个有效的ID号时,程序都会崩溃——为什么会发生这种情况 这是结构和结构数组的声明: struct customer { // set up customer template // char name [MAXNAM]; char surname [MAXNAM]; int idnum [MAX_ID]; }; struct custom

我正在尝试编写一个数据验证函数,其中ID号必须是结构数组中的唯一数字。每次我试图保存一个有效的ID号时,程序都会崩溃——为什么会发生这种情况

这是结构和结构数组的声明:

struct customer {                   // set up customer template    //
    char name [MAXNAM];
    char surname [MAXNAM];
    int idnum [MAX_ID];
    };
struct customer data_cus[MAXCUS];
这在主程序中:

printf ("Please Enter ID Card, [NOTE! Only numbers are allowed!]\n");
                int checkID;

                while ((scanf ("%d",&checkID) == 0 || customerID(checkID, count)==1))
                {
                    printf ("This ID is already taken! Please enter unique ID!\n");
                    while (getchar()!='\n')
                    {
                        continue;
                    }
                    *data_cus[count].idnum = checkID;
                }
以下是用于检查文件中已存在的id的函数:

int customerID (int cCheck, int count)
{
    FILE * pcustomer;
    int size = sizeof (struct customer);

    struct customer temp;

    rewind (pcustomer);
    while (fread (&temp,size,count,pcustomer)==1)
    {
        if (*temp.idnum == cCheck)
        {
            return 1;
        }
    }
    return 0;
}

谢谢你的帮助

scanf
返回成功匹配的项目数,我想您的意思是:

while (scanf ("%d",&checkID) == 1 && customerID(checkID, count)==1).
成功读取唯一ID时,应确保
count
不超过
MAXCUS
only增量,并且
idnum
不需要整数数组,因为每个记录只有一个

另外,函数
customerID
显然是错误的,在这里,您读取了多个
customer
结构并写入
temp
,这是单个
customer
结构,这很可能是它崩溃的原因:

 while (fread (&temp,size,count,pcustomer)==1)

如果您跟踪数组中的ID,而不是每次要检查新ID是否唯一时都从文件中读取ID,那么就容易多了。

idnum是一个整数数组。这真的是你想要的,而不仅仅是一个简单的整数吗

我敢肯定,如果您从结构中删除
[MAX\u ID]
,事情会好得多


但是,一旦我们看到ID检查代码之后的代码,我保留更改其崩溃原因的权利

啊,是的,你是对的。。。该测试条件是错误的-尽管程序仍在崩溃。程序背后的逻辑是否良好?@user1816546什么是
idnum
?显示结构的声明。当用户被询问是否要继续输入时,从不递增
count
它似乎在程序结束时递增count