01.C:EOF理解

使用C标准时,会使用到EOF的概念,EOF是End of File的缩写,在操作系统中资料源无更多资料可以读取,可以用来表示I/O的结束。在C语言中,C标准函数库中表示文件结束符,在while循环中,以EOF作为循环结束的标志。在C标准库中,EOF的定义如下:

#define EOF (-1)

黑盒测试来说,所有的输入数据都是放到一个文件里的,系统会让程序去读取这个文件里的输入数据,然后执行并输出结果。如果题目没有指定何时结束输出,一般都是指输完所有数据为止。那对于这类题目,如何解决这种输入要求?
C语言标准库中,scanf() 函数平时作为一条语句使用,但它是有返回值的。scanf()函数的返回值为其成功读入的参数的个数。这就是说,如果语句scanf("%d", &num) 成功读入了一个整数,scanf的返回值就为1,如果scanf("%d%d", &n, &m) 成功读入了两个整数,scanf的返回值就为2。
只有在读取文件时达到文件末尾时导致的无法读取的现象,就会产生读取失败。这个时候,scanf() 函数会返回-1而不是0。根据C语言中EOF的定义,EOF的值为-1。所以,当题目没有明确说明需要读取多少数据时,就可以利用scanf()的返回值是否为EOF来判断输入是否结束。所以可以用以下写法:

while(scanf("%d", &n) != EOF){
	···
}
C语言中,EOF常被作为文件结束的标志。还有很多文件处理函数处错误后的返回值也是EOF,因此常被用来判断调用一个函数是否成功。
案例: ^1aa5ff
```C
#include <cstdio>
const int maxn = 200;
int set[maxn];
int main(){
    int n, num, x;
    while (scanf("%d", &n) != EOF)
    {
        scanf("%d", &n);
        for (int i = 0; i < n; i++)
        {
            scanf("%d", &num);
            set[i] = num;
        }
        scanf("%d", &x);
        int k;
        for(k = 0; k < n; k++){
            if (x == set[k])
            {
                printf("%d", k);
                break;
            }
        }
        if (k == n)
        {
            printf("%d", -1);
        }
    }
    return 0;
}

上述程序要求分组输入,在使用了EOF的while循环,如果没有,则为死循环,在上述循环中,可以采用ctrl+z来终止循环。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
下一篇