我正在尝试计算文本文件中的数字数量。我有以下代码:
FILE *f1;
char pathname[4096];
snprintf(pathname, 4095, "%s%d%s\n", "Key_", 2, ".txt");
if( ( f1 = fopen(pathname, "w+") ) == NULL )
perror("fopen");
for(int i = 0; i<20; ++i)
fprintf(f1, "%d\n", i+1);
int sum = 0;
int num;
while( fscanf(f1, "%d", &num) != EOF )
++sum;
printf("number of numbers: %d\n", sum);
此代码表示文件中的数字为零。但是,如果我关闭文件流并重新打开它,则总和将为20,如预期的那样。知道为什么会这样吗? 感谢
答案 0 :(得分:0)
在您再次从头开始阅读之前,您需要使用fseek
重置文件中的当前位置:fseek(f1, 0, SEEK_SET);
答案 1 :(得分:0)
发生读取的文件指针与写入共享。由于w+
创建新文件或截断现有文件,因此文件开头为空。当您写入文件时,文件指针向前移动并始终指向文件末尾。现在,当你在那个位置阅读时,你会立刻点击EOF。
写完之后,在阅读之前,请先找fseek(f1, 0, SEEK_SET);