在C里面的FILE I/O[求助]
有一个问题,在对 FILE 进行 input and output 操作时,她的 fseek, fputc, fread...等等的function 和她的file pointer 到底是怎样工作的? 如果有一个程序:
#include<stdio.h>
#include<ctype.h>
#include<string.h>
main()
{
FILE *test;
char ch;
test = fopen("test.dat","r+");
while( (ch = fgetc ( test )) != EOF )
{
fseek(test, (-1)*sizeof(char), SEEK_CUR);
if( islower(ch))
{
ch = toupper(ch);
}
else
{
ch = tolower(ch);
}
fputc( ch, test );
}
fclose(test);
}
test.dat 是一个已经有的文件。假如是:abcde
程序无限循环,用Ctrl+C结束程序,其运行结果是:
ABBBBBBBBB...BBBBBBBBb
如果在
fputc( ch, test );
后面加上,fflush(test);
那程序就能正确运行。
这是为什么呢?
可以看到不加 fflush(test); 的话,程序的前两次循环是可以正确运行的,这又是为什么呢?
我想了一天也想不懂啊!!!
那位高手指教指教。万分感谢!!!
#include<stdio.h>
#include<ctype.h>
#include<string.h>
main()
{
FILE *test;
char ch;
test = fopen("test.dat","r+");
while( (ch = fgetc ( test )) != EOF )
{
fseek(test, (-1)*sizeof(char), SEEK_CUR);
if( islower(ch))
{
ch = toupper(ch);
}
else
{
ch = tolower(ch);
}
fputc( ch, test );
}
fclose(test);
}
test.dat 是一个已经有的文件。假如是:abcde
程序无限循环,用Ctrl+C结束程序,其运行结果是:
ABBBBBBBBB...BBBBBBBBb
如果在
fputc( ch, test );
后面加上,fflush(test);
那程序就能正确运行。
这是为什么呢?
可以看到不加 fflush(test); 的话,程序的前两次循环是可以正确运行的,这又是为什么呢?
我想了一天也想不懂啊!!!
那位高手指教指教。万分感谢!!!