c - 使用标准输入

标签 c console stdin

所以我必须实现一个与文本文件(.txt)一起使用的程序,该程序已像这样放入标准输入:./program [argumets] <textfile.txt不使用 fopen、fscanf、malloc 等函数,我不知道该怎么做。我需要使用该文本文件中的字符(将它们打印到屏幕上、打印最大/最小值、打印总和等),而不是使用文件本身,所以,也许有人得到了提示?谢谢。

最佳答案

从这样的文本文件中读取几乎与从键盘中读取相同。以至于如果不做一些特殊的技巧,你的程序就无法知道输入是来自键盘还是来自文件。

当您确实需要使用需要文件的功能时,有 stdin ,即所谓的“文件指针”,类型为 FILE* ,与 fopen 返回的相同。文件指针被 fscanf 等函数接受(但你可以直接调用scanf)和fgets (不要使用 gets ,它已经严重损坏,并最终从 C11 标准中删除)。

如果您需要使用采用文件描述符(整数)的函数,例如 open 返回调用,并被 read 等函数接受,则标准输入的文件描述符编号为 0,但通常应该使用 STDIN_FILENO持续的。并且,不要混合从文件描述符(无缓冲)读取和从 FILE* 读取。 (缓冲),因为缓冲会弄乱您获得的数据。使用FILE*对于大多数应用程序来说可能更好。

为了使这一点更加具体,您可以开发您的程序,而不是使用 <要重定向输入文件,您可以在编辑器中打开输入文件,将其复制到剪贴板,在终端中运行应用程序,然后将输入文件作为文本粘贴到终端。

关于c - 使用标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26561192/

相关文章:

java - 为什么本地 PrintWriter 会干扰另一个本地 PrintWriter?

sql - 运行 SQL 文件时如何将内容打印到 postgres 输出控制台?

python - asyncio 无法在 Windows 上读取标准输入

c - 关于fgets()和stdin一起使用的机制

sockets - Node.js 端口同时监听和读取标准输入

c - 文件读取返回重复两次

c - sscanf 解析格式化字符串

c - 是否有一个编译器选项可用于将堆栈变量初始化为非零值(毒药)以帮助调试?

c - 前缀和的并行化 (Openmp)

java - 如何从 Java 控制台读取单个字符(当用户键入时)?