首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C语言:当从文件重定向输入时,如何知道何时不再从stdin输入

C语言:当从文件重定向输入时,如何知道何时不再从stdin输入
EN

Stack Overflow用户
提问于 2018-06-07 04:15:36
回答 2查看 730关注 0票数 0

我的程序应该以以下方式运行:

CProgram < file.txt

file.txt可以拥有任意多行的数据。例如,

代码语言:javascript
运行
复制
2 3 G 5 6
5 6 7 
6 9 3 6 H
<<Blank line>>

有没有办法知道没有更多的输入行?每个文件的末尾都有一个空行。

我能够读取行,但我的程序永远不知道是否有更多的数据需要读取,并且一直在等待更多的数据,就像通常从stdin中期望的那样。

我就是这么读的

代码语言:javascript
运行
复制
 while( fgets(line, sizeof(line), stdin) != NULL) {
   ... do something
}
EN

回答 2

Stack Overflow用户

发布于 2018-06-07 04:38:19

EOF表示文件的末尾,所以您可以读取文件,直到到达EOF为止。

代码语言:javascript
运行
复制
int c = 0;
while ((c = getchar ()) != EOF) { ... }

编辑:

代码语言:javascript
运行
复制
while ( fgets(line, sizeof(line), stdin) != NULL ) {
    ... do something
}

应该可以正常工作,因为如果fgets()到达文件末尾,它会返回NULL。至少在Unix之类的操作系统(Unix/Linux/BSD/Mac )中,一切都是文件,标准输入也是如此。这样您就可以在标准输入上检查EOF

票数 3
EN

Stack Overflow用户

发布于 2018-06-07 04:56:55

由于您正在从stdin读取并使用fgets(),因此要终止循环,或者用户没有更多的行,请检查fgets()的返回值,如下所示。

代码语言:javascript
运行
复制
char *ptr = NULL;
while( (ptr= fgets(line, sizeof(line), stdin)) != NULL) {
    if( *ptr == '\n')
        break;
    else { /* do something */  }
}

最后,当您按ENTER键时,if条件将为true并终止。

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

https://stackoverflow.com/questions/50732873

复制
相关文章

相似问题

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