首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取文件后从stdin读取

读取文件后从stdin读取
EN

Stack Overflow用户
提问于 2019-06-18 11:28:55
回答 2查看 62关注 0票数 0

我试图在读取完给定文件后,或者如果给定的文件名不存在时,从stdin读取每一行。目前我正在使用以下格式。

代码语言:javascript
复制
while (fgets(buf, sizeof(buf), fp)!=NULL){
  main process...
}
while (fgets(buf, sizeof(buf), stdin)!=NULL){
  main process...
}

这种格式确实按照我的意愿工作。但是,主进程是一个相当庞大的代码,是否有一种方法可以缩短这个过程,这样我就可以只编写一次write循环了?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-18 11:43:42

如果您的问题是“主进程”包含了许多您不想重复的代码行,那么最简单的解决方案就是创建一个实现主进程的函数。

由于while循环是相同的,所以除了文件指针之外,您还可以在函数中包含while循环,并将文件指针作为参数(如David的注释中所示)。

然后,您应该添加如下函数:

代码语言:javascript
复制
void process_input(FILE *input_handle) {
   char buf[1024];
   while (fgets(buf, sizeof(buf), input_handle) != NULL) {
      main process...
   }
}

然后,您的原始代码应该替换为:

代码语言:javascript
复制
process_input(fp);
process_input(stdin);
票数 3
EN

Stack Overflow用户

发布于 2019-06-18 19:57:11

有没有办法缩短这个时间,这样我就可以只写一次write循环了吗?

没有。

当然,您可以将代码抽象成一个以FILE*作为参数的函数,或者自己扩展stdio接口(示例),但它的长短在于,无论是标准C还是任何流行的libc实现都没有类似于perlARGV文件句柄,也没有任何允许您将文件列表作为单一流打开的东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56648106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档