问题是您试图打印 FILE 指针而不是文件的内容 - 您需要一个变量来存储它。
看到其他方法很有趣。这是 fscanf() 的实现 -
#include <stdio.h>
#define FILENAME "test.txt"
int main(void)
{
FILE *myfile;
char string[81] = {'\0'};
myfile=fopen(FILENAME , "r");
if(myfile == NULL)
{
printf("The file test.txt could not be found! Exiting...\n");
return -1;
}
while(fscanf(myfile, " %80[^\n]s", string) != EOF)
{
printf("%s\n", string);
}
fclose(myfile);
return 0;
}
当您打开文件时,如果操作失败将返回 NULL,最好明确检查这一点,以便您知道出了什么问题。
fscanf() 返回成功读取的次数(此处为 1,对于 1 次转换为字符串),如果已到达文件末尾,则返回 EOF。格式字符串首先使用空格来删除输入流中的所有前面的空格(换行符、空格、制表符)。
在 scanf() 函数中使用字段宽度说明符(80)意味着只能读取这么多字符,因此输入不能超出分配的空间 - 很有用!
[^] 表示流将被读取,直到遇到指定的字符。 [^\n] 是一种获取带有空格的字符串的方法,因为 scanf() 系列通常只读取遇到字符串的空格。请注意,不会删除换行符(它仍然是流中的第一个)。
然后打印字符串,并添加一个换行符。该程序将遍历文件中的行数(最多 80 个字符,由换行符分隔)。如果您想保留这些行,您可以将 string 设置为 char 数组并每次递增。这是 fscanf() 格式字符串中的第一个空格派上用场的地方,它将删除仍在流开头的换行符(以及任何其他前面的空格)。
我还没有找到任何在线学习 C 的权威教程,但是有很多可用的。当前的标准对初学者不友好,但可以免费获得一个草稿:http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf
另一个很好的资源(但不是教程)是http://c-faq.com/
关于标准库函数的来龙去脉,我发现的最佳参考是 Harbison & Steele 的 C: A Reference Manual - 但遗憾的是它不是免费的。