C 在结构中输入编号-检查该编号是否已存在于文件中
我正在尝试编写一个数据验证函数,其中ID号必须是结构数组中的唯一数字。每次我试图保存一个有效的ID号时,程序都会崩溃——为什么会发生这种情况 这是结构和结构数组的声明: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
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