【发布时间】:2014-03-30 18:11:35
【问题描述】:
我遇到了一个问题并且时间不够用,所以我尽量让它简洁。
我正在尝试在 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();
}
通常出现的问题是我得到“没有要恢复的记录......对不起”
然而,在此之前,e.Accn 的声明是“%s”,发生的事情是当我调用“tlog”时它会打印数字,但不会打印输入的内容。例如,我输入 1211 并返回 82901232 或类似的东西。任何帮助将不胜感激。
更新
将结构中的 Accn 从 double 更改为 int, 将 Accn scanf 和 printf 从 %d 更改为 %i, 将fseek区的Accn由e.Accn-1改为e.Accn+1
【问题讨论】:
-
您为什么使用
double作为帐号?我从未见过浮点帐号。 -
//让帐号翻倍只是为了看到一些变化而感到沮丧
-
@AtlasB 将格式更改为
printf("Account: %lf\n", e.Accn); -
@chux 它没有显示任何效果,我在 tlog 中使用它但它仍然只是给出了 else 语句