【问题标题】:Working with stdin使用标准输入
【发布时间】:2014-10-25 09:53:08
【问题描述】:

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

【问题讨论】:

  • 基本的文件处理功能会帮助你..open()
  • 你不需要做任何特别的事情来从标准输入中获取。它会自动为您打开,您只需阅读即可。
  • 你要记住stdinfopen打开的一样是一个普通的文件流。首先尝试使用例如fscanfstdin 的类似功能,然后您可以轻松地将其切换到 fopen 打开的文件。

标签: c console stdin


【解决方案1】:

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

当你确实需要使用需要文件的函数时,有stdin,即所谓的“文件指针”,类型为FILE*,与fopen返回的相同。文件指针被fscanf(但你可以直接调用scanf)和fgets(不要使用gets之类的函数接受,它被致命地破坏了,最后从C11标准中删除了)。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-10
    • 2017-05-16
    • 2013-09-18
    • 1970-01-01
    • 2022-07-10
    • 1970-01-01
    • 2011-05-01
    • 2015-01-05
    相关资源
    最近更新 更多