Input:
Code:
Enter elements for acc
1
a
15
2
b
10
Enter elements for trans
1
d
15
2
w
5
Expected output
Code:
1 a 30.000000
2 b 5.000000
Actual output
Code:
1 a 30.000000
2 b 10.000000
Code:
#include<stdio.h>
int main(void)
{
struct
{
int accno;
char transtype;
float amt;
}trans;
struct
{
int accno;
char name[30];
float bal;
}acc;
FILE *fa, *ft;
long pos1, pos2;
if((fa=fopen("acc.txt","w+"))==NULL)
puts("Unable to open");
if((ft=fopen("trans.txt","w+"))==NULL)
puts("Unable to open");
puts("Enter elements for acc");
while((scanf("%d %s %f",&acc.accno,acc.name,&acc.bal)) == 3)
fwrite(&acc,sizeof(acc),1,fa);
puts("Enter elements for trans");
while(scanf("%d %c %f",&trans.accno,&trans.transtype,&trans.amt)==3)
fwrite(&trans,sizeof(trans),1,ft);
fclose(fa);
fclose(ft);
if((fa=fopen("acc.txt","r+"))==NULL)
puts("Unable to open");
if((ft=fopen("trans.txt","r"))==NULL)
puts("Unable to open");
while(fread(&trans,sizeof(trans),1,ft) == 1)
{
rewind(fa);
pos2 = ftell(fa);
while(fread(&acc,sizeof(acc),1,fa) == 1)
{
if(acc.accno == trans.accno)
{
fseek(fa,pos2,0);
if(trans.transtype == 'd')
acc.bal+=trans.amt;
else
acc.bal-=trans.amt;
fwrite(&acc,sizeof(acc),1,fa);
}
pos2=ftell(fa);
fflush(fa);
/*fseek(fa,pos2,0);*/
}
}
rewind(fa);
printf("\nOutput\n");
while(fread(&acc,sizeof(acc),1,fa)==1)
printf("%d %s %f\n",acc.accno,acc.name,acc.bal);
fclose(fa);
fclose(ft);
}
Run this under MSVC 2010, then under Pelles C, OR otherwise, run it under MSVC 2010 first with fseek commented out, and then with fseek uncommented.