一个关于C语言文件输入输出的问题,主函数代码如下。问题在代码注释中

问题描述:

//按照主要问题的方向简化了原来的代码

#define plainplan "huaji"//文件名
int main(void)
{
int people = 0;
FILE*fp = fopen(plainplan, "rb+");//检查文件是否存在
if (fp == NULL)//创建文件
{
fp = fopen(plainplan, "wb+");
fwrite(&people, sizeof(int), 1, fp);//写入初始化数据
}
fread(&people, sizeof(int), 1, fp);
printf("%d\n", people);
puts("enter a new number:");
scanf("%d", &people);
//fp = fopen(plainplan, "rb+");//这行代码
/*
如果删除上面那行,不重新打开文件的话,下面的fwrite()函数就会无效
是不是每次打开文件,只能进行读操作或者写操作,不能进行完读操作之后再进行写操作。但我看的是《C Primer Plus》,并没有看到这种说话。求大佬点明一下我OTZ
*/
fwrite(&people, sizeof(int), 1, fp);
fclose(fp);
puts("done.");
system("pause");
return 0;
}

r是只读的意思,用wb+

int main(void)
{
char choose;
int flight_choose = 0;
char all_choose[FUNCSIZE+1] = "abcdef";
//找了点错误,但和主要问题没什么关系
struct plainsize people[MAXSIZE];
FILE*fp = fopen(plainplan, "rb+");//检查文件是否存在
if (fp == NULL)//创建文件
{
fclose(fp);//错误
fp = fopen(plainplan, "a");//模式错误
chushi(people);

找了原因,在“这行代码”的地方使用了rewind(fp);就解决了问题,关于这个我在书上只找到“标准I/O内幕”的半页说明,还不是很能理解文件的工作原理。