繁体   English   中英

为什么这段代码不需要更清晰的 feof?

[英]Why doesn't this code need clearerr for feof?

每个 stream 都有一个“文件结束 (EOF) 标志”。 只有在 stream 上调用 clearerr function 时,该标志才会被清除。 feof(p) function 返回此 EOF 标志的当前 state。

https://ibb.co/zGNcCZp

#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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM