【问题标题】:Reading text from stdin (without fopen)从标准输入读取文本(不带 fopen)
【发布时间】:2018-04-06 23:35:55
【问题描述】:

我正在尝试编写一些代码来逐行从标准输入读取我的文本文件,而不使用fopen。我需要 42 行,最多 100 个字符。

帮助我完成这项工作并向我解释它是如何工作的。谢谢!

int main()                                                      
{
char str[100];

fgets(str, sizeof(str), stdin);
fputs(str, stdout);
return 0;}

【问题讨论】:

  • while(character != '\n'); 会导致死循环(假设character 没有\n 的初始值)。
  • @pzaenger 我们不应该使用这个功能:-/
  • @JohnnyMopp 不幸的是,我不知道如何制作它。你能试着给我解释一下吗?
  • 如果您只是将输入回显到控制台,为什么需要将其存储在数组中?要逐个阅读stdin,您可以使用getchar()。请参阅getchar()的文档
  • 所以这是家庭作业?目标是展示从标准输入读取字符、将它们存储在行数组中然后打印每一行的能力?您真的应该发布老师给您的作业,以及您拥有的任何代码以及对您的困难的准确描述。

标签: c stdin


【解决方案1】:

不使用 fopen

如果open 被容忍。为什么不将它与 read 一起使用?此解决方案将允许您逐个字符地读取字符。

int main(void)
{
  int file_descriptor = open("./path", O_RDWR); /* Open with read/write */
  char text_block[10]; // Random size

  read(file_descriptor, text_block, 1); /* This will read 1 characters
  from the file */

  /* Then do what you want with the char readed. */
}

考虑到这个解决方案,下面是一个可行的过程:

  1. 使用stat()函数知道文件的大小(阅读手册)
  2. 使用与上述相同的过程,但读取文件的大小而不是读取 1 个字符
  3. 每一行由 '\n' 分隔,最后一行除外。只需使用它来将您完全读取的文件分成几行

我猜是做作业的……这段代码有错误直到你找到它才会编译。意思是在网上搜索手册并阅读它。

【讨论】:

    猜你喜欢
    • 2016-12-30
    • 2014-05-27
    • 2015-10-07
    • 2016-09-22
    • 1970-01-01
    • 2013-03-30
    • 2012-02-17
    • 2011-03-30
    • 1970-01-01
    相关资源
    最近更新 更多