#include<conio.h>
#include<stdio.h>
struct stud
{
int rollno;
char name[10];
char add[10];
};
void main()
{
struct stud st;
FILE *fp,*fpp;
char another='y',ch;
int a,choice,i;
printf("***Press 1 to Add record/Create database***\n");
scanf("%d",&a);
if(a==1) /*recording data begins here*/
{
fflush(stdin);
printf("ADD or CREATE NEW?(a/c): "); /*prompt message to add new record to existing database or to create new database*/
scanf("%c",&ch);
if(ch=='a') /*appending file*/
{
add:
ch='a';
fp=fopen("Studm.dat","ab");
while(another=='y' || another=='Y')
{
fflush(stdin);
printf("Enter RollNo. Name & Address\n");
scanf("%d%s%s",&st.rollno,st.name,&st.add);
fwrite(&st,sizeof(st),1,fp);
fflush(stdin);
printf("\nAdd another record?(y/n): "); /*prompt message to add another record*/
scanf("%c",&another);
}
}
if(ch=='c') /*to create new data file*/
{
fp=fopen("Studm.dat","wb");
printf("Enter RollNo. Name & Address\n");
scanf("%d%s%s",&st.rollno,st.name,&st.add);
fwrite(&st,sizeof(st),1,fp);
fflush(stdin);
printf("\nAdd another record?(y/n): ");
scanf("%c",&another);
fclose(fp);
if(another=='y' || another=='Y')
{
goto add; /*go to the append file block above*/
}
}
fclose(fp);
}
テキストエディタでソースファイルを開くと、指定されたすべての名前(文字データ)が表示されます。つまり、ブロックの保存と記録は完全に機能しています。
fflush(stdin);
printf("\n\nCopying data from studm.dat to stud1.data\n\n");
fp=fopen("Studm.dat","rb");
fpp=fopen("Stud1.dat","wb");
while(fread(&st,sizeof(st),1,fp)==1) /*loop block to copy data*/
{
fflush(stdin); /*tried every place for flushing the buffer, before and after fwrite with in the loop*/
fwrite(&st,sizeof(st),1,fpp);
}
fclose(fp);
fclose(fpp);
ソースファイルのように、最後から2番目のレコードまでのプログラムコードレコード全体を実行した後、テキストエディタでターゲットファイルを開きました。
printf("\n\nCopying done now reading data from file Stud1.dat\n\n");
fpp=fopen("Stud1.dat","rb");
while(fread(&st,sizeof(st),1,fp)==1)
{
printf("%d %s %s\n",st.rollno,st.name,st.add);
}
fclose(fpp);
getch();
}
ブロックのコピーに問題があると思いますが、それがバッファに関連しているのか、間違ってコーディングしたのか、バグなのかわかりません。