我正在尝试使用C。
从文件中读取数据这是文件(text.txt)的样子:
element1 element2 element3 element4 element5 element6 element7
element1 element2 element3 element4 element5 element6 element7
element1 element2 element3 element4 element5 element6 element7
element1 element2 element3 element4 element5 element6 element7
element1 element2 element3 element4 element5 element6 element7
下面你看到我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void read_txt(){
FILE *fp;
char buf[100];
size_t bytes_read;
fp = fopen("text.txt", "a");
if (fp == NULL) {
printf("File couldn't be opened properly.");
exit(1);
}
bytes_read = fread(buf, sizeof(buf), 1, fp);
printf("%zu\n", bytes_read);
printf("%s\n", buf);
fclose(fp);
}
int main(void)
{
read_txt();
return 0;
}
不幸的是,我得到的是以下内容:
0
h
Program ended with exit code: 0
使用fread
来实现我的目标的正确方法是什么?读取并打印我文件中的所有数据?
答案 0 :(得分:3)
您对fread
的使用看起来很好。但是,您应该使用"r"
而不是"a"
打开文件。使用"a"
打开文件时,流位于文件末尾而不是开头。当然,你必须循环读取你的文件,因为你的文件包含超过100个字符
答案 1 :(得分:1)
fp = fopen("text.txt", "a");
change to
fp = fopen("text.txt", "r");
返回值 成功时,fread()和fwrite()返回读取或的项目数 书面。此数字等于仅在传输时传输的字节数 大小为1.如果发生错误,或者到达文件末尾,则 返回值是短项目计数(或零)。
答案 2 :(得分:0)
我不知道是否有一个我应该指向您的常见问题解答,但这个问题经常出现,解决方案几乎总是有这样的形式:
static const int M = 3; // For example.
int nread = -1;
int a = -1, b = -1, c = -1;
while ( M == ( nread = scanf( "%d %d %d", &a, &b, &c ) ) )
do_stuff_with( a, b, c );
// Check why the last call failed.
// Was it due to feof(stdin) with 0 == nread, or did something go wrong?
当它没有时,正确的做法通常是以二进制格式读取块
sometype buffer[M];
while ( M == fread( buffer, sizeof(sometype), M, stdin ) )
do_stuff_with( M, buffer );
请注意,您正在将size
和count
参数撤消到fread()
,尽管它可能仍然有效。
有时,人们想要做的就是阅读fgets()
(不 gets()
!)并用sscanf()
解析它。
这太复杂了,可能需要一个正则表达式库或解析器。