大神帮小弟我看下错哪了(哈希表按手机号为关键字查找)
大神帮我看下哪里错了(哈希表按手机号为关键字查找)
//creathash函数里的for循环里有错,j在33到41行之间j发生了变化,怎么回事呢??(附图)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 100
typedef struct
{
char phone[11];
char name[20];
char stuid[8];
}DATA;
void inserthash(DATA* hash,int m,char* dataphone,char* dataname,char *datastuid )//????
{
int i;
i=(dataphone[9]-'0')*10+(dataphone[10]-'0');
while(hash[i].phone[0]!='\0')
{
// i=(++i) % m ;
++i;
i%=m;
}
strcpy(hash[i].phone,dataphone);
strcpy(hash[i].name,dataname);
strcpy(hash[i].stuid,datastuid);
}
void creathash(DATA* hash,int m,int n)
{
int j;
char dataphone[11],dataname[20],datastuid[8];
printf("n=%d\n",n);
for(j=0;j<n;j++)
{
printf("j1=%d\n",j);
if(j==0)
printf("\n输入学生手机号:");
else
printf("\n输入下一个学生手机号:");
scanf("%s",dataphone);
printf("\n输入学生姓名:");
scanf("%s",dataname);
printf("\n输入学生学号:");
scanf("%s",datastuid);
printf("j2=%d\n",j);
inserthash(hash,m,dataphone,dataname,datastuid );//????
printf(".....下一次循环...\n");
}
printf("输入结束\n");
}
int hashsearch(DATA* hash,int m,char* key)
{
int i;
i=(key[9]-'0')*10+(key[10]-'0');
while(strcmp(hash[i].phone,"\0")!=0&&strcmp(hash[i].phone,key)!=0)
//i=(++i)%100;
++i;
i%=m;
if(strcmp(hash[i].phone,"\0")==0)
return -1;
else
return i;
}
int main()
{
char find[11];
int num,k;
DATA hash[SIZE];
printf("输入学生个数:");
scanf("%d",&num);
creathash(hash,100,num);
printf("\n输入查找的手机号");
scanf("%s",find);
k=hashsearch(hash,100,find);
if(k<0)
printf("查找失败\n");
else
{
printf("序号为%d\n",k);
//creathash函数里的for循环里有错,j在33到41行之间j发生了变化,怎么回事呢??(附图)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 100
typedef struct
{
char phone[11];
char name[20];
char stuid[8];
}DATA;
void inserthash(DATA* hash,int m,char* dataphone,char* dataname,char *datastuid )//????
{
int i;
i=(dataphone[9]-'0')*10+(dataphone[10]-'0');
while(hash[i].phone[0]!='\0')
{
// i=(++i) % m ;
++i;
i%=m;
}
strcpy(hash[i].phone,dataphone);
strcpy(hash[i].name,dataname);
strcpy(hash[i].stuid,datastuid);
}
void creathash(DATA* hash,int m,int n)
{
int j;
char dataphone[11],dataname[20],datastuid[8];
printf("n=%d\n",n);
for(j=0;j<n;j++)
{
printf("j1=%d\n",j);
if(j==0)
printf("\n输入学生手机号:");
else
printf("\n输入下一个学生手机号:");
scanf("%s",dataphone);
printf("\n输入学生姓名:");
scanf("%s",dataname);
printf("\n输入学生学号:");
scanf("%s",datastuid);
printf("j2=%d\n",j);
inserthash(hash,m,dataphone,dataname,datastuid );//????
printf(".....下一次循环...\n");
}
printf("输入结束\n");
}
int hashsearch(DATA* hash,int m,char* key)
{
int i;
i=(key[9]-'0')*10+(key[10]-'0');
while(strcmp(hash[i].phone,"\0")!=0&&strcmp(hash[i].phone,key)!=0)
//i=(++i)%100;
++i;
i%=m;
if(strcmp(hash[i].phone,"\0")==0)
return -1;
else
return i;
}
int main()
{
char find[11];
int num,k;
DATA hash[SIZE];
printf("输入学生个数:");
scanf("%d",&num);
creathash(hash,100,num);
printf("\n输入查找的手机号");
scanf("%s",find);
k=hashsearch(hash,100,find);
if(k<0)
printf("查找失败\n");
else
{
printf("序号为%d\n",k);