【发布时间】:2015-05-13 11:00:14
【问题描述】:
首先,我在这里阅读:
我正在尝试用 C 读取二进制文件。并编写了以下代码:
struct emp
{
char name[20];
char surname[20];
char no[20];
char aldigiDersKodu[20];
};
struct emp e;
***
***
***
FILE *fp;
fp = fopen("student.bin","rb+");
if(fp == NULL)
{
fp = fopen("student.bin","wb+");
if(fp == NULL)
{
printf("File is not opening.");
exit(1);
}
}
***
***
***
fseek(fp, 0, SEEK_END);
another = 'y';
while(another == 'y')
{
printf("\nOgrencinin Adi: ");
scanf("%s",e.name);
printf("\nOgrencinin Soyadi: ");
scanf("%s", &e.surname);
printf("\nOgrencinin Numarasi: ");
scanf("%s", &e.no);
fwrite(&e, sizeof(struct emp), 1, fp);
printf("\nYeni Ogrenci Ekle(y/n)\n");
fflush(stdin);
another = getche();
}
***
***
***
我正在向学生添加课程名称和课程代码(例如:数学,M1)。(相同的方法)
这个读取到二进制文件的代码:
scanf("%s", no);
rewind(fp);
while(fread(no, sizeof(struct emp), 1, fp) == 1)
{
printf("\n%s %s %s %s", &e.name, &e.surname, e.no, &e.aldigiDersKodu);
}
当我读取二进制文件时,在控制台中看起来像这样:
我的 bin 文件如下所示:
Aytunc øA'v:A'vXÿæ¯Yalcinkaya °@ Àþ( 1,Aytunc,Yalcinkaya,M 'vÍE'v°@ ”ÿ( @ Osman øA'v:A'vXÿæ¯Villi kaya °@ Àþ( 2 ( Ìÿ( r'vô@_Ùþÿÿÿ:A'vÍE'v°@ ”ÿ( @
但我想在控制台屏幕中查看此输出:
1 Aytunc Yalcinkaya M
【问题讨论】:
-
fflush(stdin)是未定义的行为,而您的二进制文件基本上是一个文本文件,没有太大区别,因为您只存储文本。并将'\n'放在打印行的末尾,因为它会刷新stdout,如果你把它放在行首,有些文本可能不会打印,我在windows编程教程中看到很多,但是大多数时候这没有意义。 -
while(fread(no,-->while(fread(&e,?printf("\n%s %s %s %s", &e.name, &e.surname, e.no, &e.aldigiDersKodu);& -
你关闭过fp吗?为什么不编写一个非常简单的完整测试程序(将结构简化为只有一个成员)?这对你自己也有帮助。
-
@BLUEPIXY while(fread(no, --> while(fread(&e, ? printf("\n%s %s %s %s", &e.name, &e.surname, e .no, &e.aldigiDersKodu); 请解释此评论 :) 我应该删除哪一部分??
-
例如
&e.name更改为e.name。
标签: c binaryfiles fread bin