0

我正在尝试编写一个数据验证函数,其中 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;
}

谢谢您的帮助!

4

2 回答 2

0

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

while (scanf ("%d",&checkID) == 1 && customerID(checkID, count)==1).

您应该确保在成功读取唯一 ID 时count不超过MAXCUS仅增量,并且您不需要整数数组,idnum因为每条记录只有一个。

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

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

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

于 2012-12-23T11:06:49.507 回答
0

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

我很确定如果你[MAX_ID]从你的结构中删除,事情会更好。

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

于 2012-12-23T11:47:27.870 回答