在以下C
- 代码中,我打开一个名为test.txt
的文件,其中包含几行代码。然后我在while循环中读取这些行并将它们打印到stdout
。之后我通过例如文件进行了一些更改。将数字42
附加到其中。然后我想将已更改文件的内容打印到stdout
,但我似乎在那里遗漏了一些内容。到目前为止,这是我的代码(不必要地评论):
#include <stdio.h>
#include <stdlib.h> /* for exit() */
main ()
{ /* Declare variables */
FILE *file_read;
char file_save[100];
int number = 42;
/* Open file */
file_read = fopen("/home/chb/files/Cground/test.txt", "a+");
/* Check if file exists. */
if (file_read == NULL) {
fprintf(stderr, "Cannot open file\n");
exit(1);
}
/* Print what is currently in the file */
printf("This is what is currently in the file:\n");
while(fgets(file_save, 100, file_read) != NULL) {
printf("%s", file_save);
}
/* Change the contents of the file */
fprintf(file_read, "%d\n", number);
/* Print what is in the file after the call to fscanf() */
printf("This is what is now in the file:\n");
/* Missing code */
fclose(file_read);
}
似乎放置Missing code
所在的简单while循环,类似于之前使用过的循环是不够的。有人可以解释一下发生了什么。我不介意技术性问题!
答案 0 :(得分:1)
您不要将文件指针设置回启动状态。因为它已经在文件的末尾,所以没有什么可读的了。 在再次阅读文件之前,请执行以下操作:
rewind(file_read); //before the "missing code" comment
将其设置回文件的开头。
答案 1 :(得分:1)
为了再次从头开始读取文件,你必须先调用fseek(),就像这样
fseek(file_read, 0, SEEK_SET);
这会将流位置指示器设置回文件的开头。