我试图在读取完给定文件后,或者如果给定的文件名不存在时,从stdin读取每一行。目前我正在使用以下格式。
while (fgets(buf, sizeof(buf), fp)!=NULL){
main process...
}
while (fgets(buf, sizeof(buf), stdin)!=NULL){
main process...
}这种格式确实按照我的意愿工作。但是,主进程是一个相当庞大的代码,是否有一种方法可以缩短这个过程,这样我就可以只编写一次write循环了?谢谢。
发布于 2019-06-18 11:43:42
如果您的问题是“主进程”包含了许多您不想重复的代码行,那么最简单的解决方案就是创建一个实现主进程的函数。
由于while循环是相同的,所以除了文件指针之外,您还可以在函数中包含while循环,并将文件指针作为参数(如David的注释中所示)。
然后,您应该添加如下函数:
void process_input(FILE *input_handle) {
char buf[1024];
while (fgets(buf, sizeof(buf), input_handle) != NULL) {
main process...
}
}然后,您的原始代码应该替换为:
process_input(fp);
process_input(stdin);发布于 2019-06-18 19:57:11
有没有办法缩短这个时间,这样我就可以只写一次write循环了吗?
没有。
当然,您可以将代码抽象成一个以FILE*作为参数的函数,或者自己扩展stdio接口(示例),但它的长短在于,无论是标准C还是任何流行的libc实现都没有类似于perl的ARGV文件句柄,也没有任何允许您将文件列表作为单一流打开的东西。
https://stackoverflow.com/questions/56648106
复制相似问题