C程序如何从txt文件加载数据?

C程序如何从txt文件加载数据?,c,stdio,C,Stdio,我在论坛上找到了这段代码,它工作得很好,但我不知道它是如何工作的,为什么工作。有人能告诉我一些关于这个代码的话吗?我想了解它,并知道如何使用它。或者,如果您知道一些更好的方法,如何将数据输入bin。文件来自txt文件,你能给我一些建议吗 #include <stdio.h> #define BLOCK_SIZE 256 int main(void) { char buf[BLOCK_SIZE]; size_t bytes; while(!feof(stdin))

我在论坛上找到了这段代码,它工作得很好,但我不知道它是如何工作的,为什么工作。有人能告诉我一些关于这个代码的话吗?我想了解它,并知道如何使用它。或者,如果您知道一些更好的方法,如何将数据输入bin。文件来自txt文件,你能给我一些建议吗

#include <stdio.h>
#define BLOCK_SIZE 256

int main(void) 
{
    char buf[BLOCK_SIZE];
    size_t bytes;

while(!feof(stdin)) {
    bytes = fread(buf, 1, BLOCK_SIZE, stdin);
    fwrite(buf, 1, bytes, stdout);
}
return 0;
}
#包括
#定义块大小为256
内部主(空)
{
char buf[块大小];
字节大小;
而(!feof(stdin)){
字节=fread(buf,1,块大小,标准输入);
fwrite(buf,1,字节,标准输出);
}
返回0;
}
非常感谢。

您程序的目的是以256个字符的块从标准输入复制到标准输出

fread
函数最多可将256个{BLOCK_SIZE}字符读入内存缓冲区。函数返回实际读取的数量

fwrite
函数将缓冲区的内容写入标准输出


此操作通过放置到循环中来重复

你至少读过并写过这篇文章吗?告诉他们<代码>((!)(FEF)(STDIN))< /C>是为什么C++标签在这是一个C语言问题时是错误的?你不能相信堆栈溢出(或互联网)上的所有代码都是正确的。有些人接受答案,而那些提供答案的人可能完全错了。这段代码就是这样的,它似乎来自于一个公认的答案:顺便说一句,您可以删除
argv
argc
标记,因为这些变量没有在程序中使用,也不是问题的一部分。程序作者可以用以下声明替换
main
声明:
intmain(void)
。但是循环如何停止?当feof(stdin)=0?如果是的话,0是从哪里来的?是空字符还是类似的?这不是我找不到或无法理解的。@Tehryn你看过feof的文档了吗?当遇到“文件结束”(EOF)时,它返回
1
,在本例中,EOF是标准输入流的结束(
stdin
)。当流不在其末端时,它返回
0
,因此
!feof(stdin)
在流结束时结束“循环”。这些都是非常基本的C语言,我建议你仔细阅读。@Tehryn:这就是为什么建议你仔细阅读标准函数的原因
feof
是一个函数,@PCLuddite否它不是
feof()
在试图读取文件末尾以外的内容时发出通知。一个大的、反复出现的错误是认为它会告诉您何时到达文件末尾。这需要一个b:当文件的结尾被破坏时。@WeatherVane同意,我在这方面的解释并不准确。