为啥结构体的成绩项赋值不了啊?

#include<stdio.h>
#include<string.h>
struct sa{
char number[8];
int score;
char name[5];
};
typedef struct sa data;
int hash(char * pn);
void add(data * ptr);
void de1ete(data * ptr);
int search( data * ptr);
void change(data * ptr);
int main(void)
{
data test1[40];
int n;
while(scanf("%d",&n)==1&&n!=-1)
test1[25].score;
*test1[25].number;
*test1[25].name;
switch (n)
{
case 1:
add(test1);
break;
case 2:
de1ete(test1);
break;
case 3:
search(test1);
break;
case 4:
change(test1);
break;
default:
printf("Error\n");
break;
}
return 0;
}

int hash (char * pn)
{
int result;
int shi=(pn+6)-'0',ge=(pn+7)-'0';
return (shi*10+ge-1);
}

void add(data * ptr)
{
int scorex,no;
char namex[5],numberx[9];
scanf("%s %d %s",namex,&scorex,numberx);
no=hash(numberx);
(ptr+no)->score=scorex;
strcpy((ptr+no)->name,namex);
strcpy((ptr+no)->number,numberx);
return;
}

void de1ete(data * ptr)
{
int no;
char numberx[9];
scanf("%s",numberx);
no=hash(numberx);
(ptr+no)->score=0;
for(int i=0;i<5;i++)
*((ptr+no)->name+i)='\0';
for(int i=0;i<9;i++)
*((ptr+no)->number+i)='\0';
return;
}
int search(data * ptr)
{
int no;
char numberx[9];
scanf("%s",numberx);
no=hash(numberx);
if(strlen((ptr+no)->number)==8)
printf("%s %d %s\n",(ptr+no)->name,(ptr+no)->score,(ptr+no)->number);
else
printf("No data\n");
return no;
}

void change(data * ptr)
{
int no,scorex;
char numberx[9];
scanf("%s %d",numberx,&scorex);
no=hash(numberx);
(ptr+no)->score=scorex;
return ;
}

大家只看我的add函数,我输入的scorex是80,想赋值给(ptr+no)->score,但没成功。我看调试窗口还是数值为0,姓名和号码项目都赋值成功了。为啥?

test1[25].score;
*test1[25].number;
*test1[25].name;
这是什么意思?没这么用的啊
你怎么输入的,把你的运行截图贴出来。

struct sa{
char number[9]; //这里改成9,不然add函数中越界了
int score;
char name[5];
};
代码修改如下:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct sa{
    char number[9];
    int score;
    char name[5];
};
typedef struct sa data;
int hash(char *pn);
void add(data *ptr);
void de1ete(data *ptr);
int search( data *ptr);
void change(data *ptr);

int main(void)
{
    data test1[40];
    int n;
    while(scanf("%d",&n)==1&&n!=-1)
    {
        /*test1[25].score;
        *test1[25].number;
        *test1[25].name;
        */
        switch (n)
        {
        case 1:
            add(test1);
            break;
        case 2:
            de1ete(test1);
            break;
        case 3:
            search(test1);
            break;
        case 4:
            change(test1);
            break;
        default:
            printf("Error\n");
            break;
        }

    }
    return 0;
}

int hash (char *pn)
{
    int result;
    int shi=*(pn+6)-'0',ge=*(pn+7)-'0';
    return (shi*10+ge-1);
}

void add(data *ptr)
{
    int scorex,no;
    char namex[5],numberx[9];
    scanf("%s %d %s",namex,&scorex,numberx);
    no=hash(numberx);
    (ptr+no)->score = scorex;
    strcpy((ptr+no)->name,namex);
    strcpy((ptr+no)->number,numberx);
}

void de1ete(data * ptr)
{
    int no;
    char numberx[9];
    scanf("%s",numberx);
    no=hash(numberx);
    (ptr+no)->score=0;
    for(int i=0;i<5;i++)
        *((ptr+no)->name+i)='\0';
    for(int i=0;i<9;i++)
        *((ptr+no)->number+i)='\0';
    return;
}
int search(data * ptr)
{
    int no;
    char numberx[9];
    scanf("%s",numberx);
    no=hash(numberx);
    if(strlen((ptr+no)->number)==8)
        printf("%s %d %s\n",(ptr+no)->name,(ptr+no)->score,(ptr+no)->number);
    else
        printf("No data\n");
    return no;
}

void change(data * ptr)
{
    int no,scorex;
    char numberx[9];
    scanf("%s %d",numberx,&scorex);
    no=hash(numberx);
    (ptr+no)->score=scorex;
    return ;
}

我搞清楚了,打扰了,谢谢

手滑了,数组边界问题,打扰了