我有一个C语言程序,我想在其中将多个dataype值存储在文件中,并从文件中读取相同的值。以下代码将数据写入文件,但以不可读的形式存储数据。同样,当我获取这些数据时,也会得到垃圾值。
我正在使用Codeblocks 17.x
#include <stdio.h>
#include <stdlib.h>
struct student
{
char name[100];
int maths, hindi;
char gend;
};
int main()
{
struct student num[3];
struct student num1;
int i;
FILE *fptr;
if ((fptr = fopen("studlist.txt","w")) == NULL){
printf("Error! opening file");
exit(1);
}
for(i=0; i<=2; i++)
{
printf("Enter your name: ");
gets(num[i].name);
printf("Enter Marks in Maths: ");
scanf("%d", &num[i].maths);
printf("Enter Marks in Hindi: ");
scanf("%d", &num[i].hindi);
printf("Enter Gender (M/F) ");
fflush(stdin);
num[i].gend=getchar();
fflush(stdin);
fputs("Student ", fptr);
putw(i, fptr);
fwrite(&num[i], sizeof(struct student), 1, fptr);
fputs("\n",fptr);
}
fclose(fptr);
if ((fptr = fopen("studlist.txt","r")) == NULL){
printf("Error! opening file");
exit(1);
}
for(i=0; i<=2; i++)
{
printf("Student %d: ",i);
fread(&num1, sizeof(struct student), 1, fptr);
printf("%s | Maths: %d\tHindi: %d\tGender: %c\n", num1.name, num1.maths, num1.hindi, num1.gend);
}
fclose(fptr);
return 0;
}
文件中存储的数据:
由于读取操作而显示的数据:
此外,我无法实现搜索和更新代码。例如,如果我想更新珍妮的商标,我将无法做到。
请帮助。
答案 0 :(得分:2)
问题是您的写作和阅读是不对称。
您这样写每个student
记录:
fputs("Student ", fptr); /**/
putw(i, fptr); /**/
fwrite(&num[i], sizeof(struct student), 1, fptr);
fputs("\n",fptr); /**/
然后您像这样读取每个student
记录:
fread(&num1, sizeof(struct student), 1, fptr);
只需摆脱多余的写操作(我用星号标记的行),它应该可以工作。