[英]Why doesn't this code need clearerr for feof?
每个 stream 都有一个“文件结束 (EOF) 标志”。 只有在 stream 上调用 clearerr function 时,该标志才会被清除。 feof(p) function 返回此 EOF 标志的当前 state。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){
int i=0;
int arr[100];
while(1){
scanf("%d",&arr[i]);
if(feof(stdin)){
break;
}
i++;
}
int j;
for(j=0;j<i;j++){
printf("%d ",arr[j]);
}
i=0;
printf("\n");
while(1){
scanf("%d",&arr[i]);
if(feof(stdin)){
break;
}
i++;
}
for(j=0;j<i;j++){
printf("%d ",arr[j]);
}
}
为什么这段代码不需要更清晰的 feof?
您正在使用scanf 。
您可以阅读现代 C ,然后是 C 标准草案,例如n1570或更好,并查看此 C 参考网站。
该scanf
function 返回一个有趣的项目计数。
失败时,它还会设置feof标志。
您不需要任何初始clearerr
,因为stdin
的隐式fopen
(或隐式初始化)(在调用main
之前在crt0中完成;另请参见fdopen )正在调用它或执行等效操作。
如果你使用GNU/Linux系统,所有的crt0
, GCC , Linux kernel , 和代码你都可以免费下载,学习开源libc
当然参见Linux From Scratch 。 它记录了如何从源代码编译所有这些。 另请阅读此相关答案并考虑在您的笔记本电脑上安装Debian 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.