如何将EOF与C中的fgets()一起使用
我试图从终端读入输入,如果有空行并按下enter键,我想停止读取输入。这是我目前的情况如何将EOF与C中的fgets()一起使用,c,input,stdin,fgets,C,Input,Stdin,Fgets,我试图从终端读入输入,如果有空行并按下enter键,我想停止读取输入。这是我目前的情况 #include <stdio.h> #include <string.h> int main(int argc,char const *argv[]){ char input[1024]; while(fgets(input,1024,stdin)!=NULL){ printf("%s", input); }
#include <stdio.h>
#include <string.h>
int main(int argc,char const *argv[]){
char input[1024];
while(fgets(input,1024,stdin)!=NULL){
printf("%s", input);
}
if(EOF){
printf("EOF");
}
return 0;
}
#包括
#包括
int main(int argc,char const*argv[]{
字符输入[1024];
while(fgets(输入,1024,标准输入)!=NULL){
printf(“%s”,输入);
}
如果(EOF){
printf(“EOF”);
}
返回0;
}
您可以做的一件简单的事情是检查fgets
读取的字符串的长度。fgets
认为输入字符串末尾的换行符是有效字符。这意味着,如果您刚刚输入一个换行符,那么您正在测试的字符串的长度将是1,因此,您希望将测试移到循环内部,而不是尝试在循环外部测试EOF。因此,您的代码应该如下所示:
#include <stdio.h>
#include <string.h>
int main(void) {
char input[1024];
while(fgets(input,1024,stdin)!=NULL) {
printf("%s", input);
if(strlen(input) == 1) {
printf("EOF\n");
break;
}
}
return 0;
}
#包括
#包括
内部主(空){
字符输入[1024];
while(fgets(输入,1024,标准输入)!=NULL){
printf(“%s”,输入);
如果(strlen(输入)==1){
printf(“EOF\n”);
打破
}
}
返回0;
}
还要注意的是,要使EOF测试正常工作,您不会按enter键,而是将文件结尾键(如linux上的CTRL-d)发送到您的程序。在这种情况下,循环内不会有strlen测试。您的代码将始终打印
“EOF”
,因为根据标准,EOF
是非零且固定的。检查空行(仅限单个换行符)非常简单while(fgets(input,1024,stdin)!=NULL&&*input!='\n')
,但这并不能解决while-loop之后的问题。查找fgets在成功和文件结束时返回的内容。这确实是一种有很好文档记录的行为。我想我以前从未见过有人尝试过if(EOF)
。。。祝贺您在CW中找到了新的尝试当您在程序中不使用命令行参数时,main()
的定义的适当形式是int main(void)
。有趣的是,您有if(EOF)
的地方是少数几个可能适合使用feof()的地方之一
相反:if(feof(stdin))printf(“EOF\n”);否则如果(ferror(stdin))printf(“ERR\n”);else断言(“不可能发生”==0)代码>将是正确的。但要注意: