我有一个问题,时间不够,所以我会尽量使它简洁。
我正在尝试在visual studio 2010中构建一个ATM系统(这是一个要求,所以我必须这样做)。我现在必须使用文件来记录使用ATM的人的信息(包括结构的参与)。我要做的是让文件正常工作(即写和读)。
结构:

struct studentA
{
int nip;
double Accn;
int money;
int damount;
int saccount;
};

要写入文件的函数:(我相信该部分工作正常)
    int r;
FILE *fpro2;
struct studentA e={0,0,1000,0,0};
fpro2=fopen("Slr.txt","wb");
if(fpro2==NULL)
 {
     puts("Can't open that file!");
     exit(1);
 }
for(r=1000;r<=2000;++r)
{
    fwrite(&e,1, sizeof(e),fpro2);
}

printf("Enter Account Number(Between 1000-2000):");
scanf("%d", &e.Accn);

fseek(fpro2, sizeof(e)*(e.Accn-1), SEEK_SET);
fwrite(&e,1, sizeof(e), fpro2);
fclose(fpro2);

printf("This File has been Updated");

getch();
system("cls");
menumain();

    }

要从文件读取的函数:
(我相信这就是错误所在,但我不确定如何解决)
    void tlog()
    {
FILE *fpro2;
struct studentA e={0,0,1000,0,0};
fpro2=fopen("Slr.txt","rb");

if(fpro2 !=NULL)
{
    fseek(fpro2, sizeof(e)*(e.Accn-1), SEEK_SET);
    fread(&e,1, sizeof(e), fpro2);
    fclose(fpro2);

    if(e.Accn !=0)
        {
        printf("Student Records\n");
        printf("Account: %d\n", e.Accn);
        }
    else
        printf("No Records To Recover...Sry\n");
}
else
    printf("Could not Open Siar");

getch();
menumain();
    }

通常出现的问题是我“没有要恢复的记录…Sry”
但在此之前,e.Accn的声明是“%s”,发生的情况是,当我调用“tlog”时,它会打印数字,但不会打印输入的内容。例如,我输入1211,然后返回82901232或类似的内容。如有任何帮助,将不胜感激。
更新
将结构中的Accn从double更改为int,
已将acn scanf和printf从%d更改为%i,
将fseek区域中的Accn从e.Accn-1更改为e.Accn+1

最佳答案

这里的一个问题不完全是您认为的那样:如果您阅读了例如this scanf reference的内容,您将看到"%d"格式是针对整数的。这意味着它将读取一个整数并将其写入一个double变量。整数的位模式与double不同。
另一个问题是,当您阅读帐户时,您在e.Accn-1呼叫中使用fseek。但此时e.Accn的值是多少?它是零,所以你试图寻找一个负位置。

09-05 05:10