][em10][em10][em10][em10][em10][em10][em10][em10][em10]

[color=0000FF][size=4]我想问下哪出错了

{init()和read()没有调用过}

运行时scanf()会跳过;

运行两次之后会提示(NULL POINTER ASSIGNMENT)[/size][/color]


[size=3]#include <stdio.h>
#include <dos.h>

union REGS regs;

struct st
{
    char name[7];
    int time;
}chuji,zhongji,gaoji;

void savefile(void);
void openfile(void);

int init(int xmi,int xma,int ymi,int yma)
{
    int retcode;
    regs.x.ax=0;
    int86(51,&regs,&regs);
    retcode=regs.x.ax;
    if(retcode==0)
    return 0; 
    regs.x.ax=7;
    regs.x.cx=xmi;
    regs.x.dx=xma;
    int86(51,&regs,&regs);
    regs.x.ax=8;
    regs.x.cx=ymi;
    regs.x.dx=yma;
    int86(51,&regs,&regs); 
    return retcode;
}

void read(int *mx,int *my,int *mbutt)
{
    int xx0=*mx,yy0=*my,but0=0,mb;
    int xnew, ynew;
    do {
        regs.x.ax=3;
        int86(51,&regs,&regs);
        xnew=regs.x.cx;
        ynew=regs.x.dx;
        *mbutt=regs.x.bx;
        }while(xnew==xx0 && ynew==yy0 && *mbutt == but0 );
    *mx=xnew;
    *my=ynew;
}

void savefile(void)
{
    FILE *fp;
    if((fp = fopen("saolei.xy","wb")) == NULL)
    exit(1);
    fwrite(&chuji,sizeof(struct st),1,fp);
    fwrite(&zhongji,sizeof(struct st),1,fp);
    fwrite(&gaoji,sizeof(struct st),1,fp);
    fclose(fp);
}

void openfile(void)
{
    FILE *fp;
    if((fp = fopen("saolei.xy","rb"))==NULL)
        {fclose(fp);return;}
    if(fread(&chuji,sizeof(struct st),1,fp)!=1)
        {fclose(fp);return;}
    if(fread(&zhongji,sizeof(struct st),1,fp)!=1)
        {fclose(fp);return;}
    if(fread(&gaoji,sizeof(struct st),1,fp)!=1)
    {}
    fclose(fp);
}

void main(void)
{
    chuji.time = 999;
    zhongji.time = 999;
    gaoji.time = 999;
    openfile();
    printf("%6d%6d%6d\n",
        chuji.time,zhongji.time,gaoji.time);
    scanf("%d %d %d",
        &chuji.time,&zhongji.time,&gaoji.time);
    savefile();
}  [/size]

[color=FF0000][size=5]     望高手赐教[/size][/color]