写入文件时,fopen() 和 fclose() 之间的中间数据存储在哪里?
While writing into a file , Where intermediate data stored in between fopen() and fclose()?
下面是一个小程序,它从用户那里获取信息并将其写入文件teacher.txt
。
我只使用一个 array q2[30]
来获取输入并使用 fprintf()
写入文件。
但是当我想输入更多的老师时,再次循环将执行但此时 fclose()
不会出现
因此数据不会 write/save(不知道)到文件中,也不会使用新输入获取 q2 的先前值 erased/overwrite。
所以在这种情况下,数据是 stored/write by fprintf()
。因为当我在 fclose()
之前手动打开 teacher.txt
时,没有任何新数据。
#include <conio.h>
#include <iostream.h>
int main()
{
system("cls");
int yoe;
char cond[]="yes";char q2[30];
FILE *p;
p = fopen("teacher.txt","a+"); //opening file in reading + appending mode
printf("\nDo you want to add more Teacher ? (yes/no)\n");
gets(q2);
fflush(stdin);
if(!strcmp(q2,cond))
{
do
{
printf("\nEnter Teacher's Name\n");
gets(q2);
fprintf(p,"\n!%s!",q2);
printf("Enter Teacher's Qualifications\n");
fflush(stdin);
gets(q2);
fprintf(p,"%s!",q2);
printf("Enter Teacher's year of experience (0-30)\n");
fflush(stdin);
scanf("%d",&yoe);
fprintf(p,"%d!",yoe);
printf("Enter Teacher's Mobile number(id) [Should be of 10 digits]\n");
fflush(stdin);
gets(q2);
fprintf(p,"%s!",q2);
printf("\nDo you want to add more Teacher ? (yes/no)\n");
fflush(stdin);
gets(q2);
}while(!strcmp(q2,cond)); // condition to check , if user want to add more Teacher , if yes then loop will execute again.
fclose(p); // when user enter 'no' then only fclose will appear.
}
fclose(p);printf("\nPress any key to return to Admin menu\n");
getch();
system("pause");
}
当您使用 fopen
打开文件时,您写入的输出是 缓冲的 ,这意味着它实际上不会发送到较低层,直到缓冲区已满或你明确地用 fflush
.
冲洗它
另请注意 fopen
/fprintf
/fclose
下的层,一直到实际硬件,可能 也 有一些缓冲可以延迟磁盘数据的实际更新。
下面是一个小程序,它从用户那里获取信息并将其写入文件teacher.txt
。
我只使用一个 array q2[30]
来获取输入并使用 fprintf()
写入文件。
但是当我想输入更多的老师时,再次循环将执行但此时 fclose()
不会出现
因此数据不会 write/save(不知道)到文件中,也不会使用新输入获取 q2 的先前值 erased/overwrite。
所以在这种情况下,数据是 stored/write by fprintf()
。因为当我在 fclose()
之前手动打开 teacher.txt
时,没有任何新数据。
#include <conio.h>
#include <iostream.h>
int main()
{
system("cls");
int yoe;
char cond[]="yes";char q2[30];
FILE *p;
p = fopen("teacher.txt","a+"); //opening file in reading + appending mode
printf("\nDo you want to add more Teacher ? (yes/no)\n");
gets(q2);
fflush(stdin);
if(!strcmp(q2,cond))
{
do
{
printf("\nEnter Teacher's Name\n");
gets(q2);
fprintf(p,"\n!%s!",q2);
printf("Enter Teacher's Qualifications\n");
fflush(stdin);
gets(q2);
fprintf(p,"%s!",q2);
printf("Enter Teacher's year of experience (0-30)\n");
fflush(stdin);
scanf("%d",&yoe);
fprintf(p,"%d!",yoe);
printf("Enter Teacher's Mobile number(id) [Should be of 10 digits]\n");
fflush(stdin);
gets(q2);
fprintf(p,"%s!",q2);
printf("\nDo you want to add more Teacher ? (yes/no)\n");
fflush(stdin);
gets(q2);
}while(!strcmp(q2,cond)); // condition to check , if user want to add more Teacher , if yes then loop will execute again.
fclose(p); // when user enter 'no' then only fclose will appear.
}
fclose(p);printf("\nPress any key to return to Admin menu\n");
getch();
system("pause");
}
当您使用 fopen
打开文件时,您写入的输出是 缓冲的 ,这意味着它实际上不会发送到较低层,直到缓冲区已满或你明确地用 fflush
.
另请注意 fopen
/fprintf
/fclose
下的层,一直到实际硬件,可能 也 有一些缓冲可以延迟磁盘数据的实际更新。