(while(scanf(“%d“,&n) !=EOF))的用法

我们在做一些oj平台上的题目时经常碰见这几个字“多组输入”,如果你不了解这几个字的含义,就会出现一种我的代码明明正确,但oj平台就是显示“答案错误”,这种就需要我们用上while(scanf("%d%d",&x,&y)!=EOF)了

在学会使用while(scanf("%d%d",&x,&y)!=EOF)前,我们需要先了解scanf函数的返回值。

scanf的返回值就是“所输入的数据与格式字符串中匹配次数.”

对于scanf("%d",&x);

如果你输入一个数字,则匹配成功,返回1;

如果你输入一个字符或其他,则匹配失败,返回0;

如果你输入^Z(就是键盘的ctrl+z),则输入错误返回-1。

那么scanf("%d%d",&x,&y) 则同理,不同输出会返回 2 1 0 -1。

或许有小伙伴会问,这和EOF有啥关系呢?

EOF是End Of File(文件结束)的缩写,在c语言库中有这样一行代码:

#define EOF -1

EOF被定义为-1这个常量。

下面回到while(scanf("%d%d",&x,&y)!=EOF)

当你加上这个时,只要你不输入^Z scanf的返回值就>=0  不等于-1 条件为真,一直循环下去,

只有你输入^Z,条件为假,终止循环。

这就是我们所说的多组输入。

当然了,如果有的小伙伴还是不理解的话,可以直接套用,以一个简单代码为例:

#include
int main()
{
    int a = 0, b = 0,sum=0;
    scanf("%d%d", &a, &b);
    sum = a + b;
    printf("%d\n", sum);
    return 0;
}

非常简单的一个代码,就是求两个数的和。

但如果题目要求多组输入的话,这样的代码会显示答案错误的。

#include
int main()
{
    int a = 0, b = 0,sum=0;
    while (scanf("%d%d", &a, &b) != EOF)
    {
        sum = a + b;
        printf("%d\n", sum);
    }
    return 0;
}

 我们只需把原来的代码放在while (scanf("%d%d", &a, &b) != EOF){ ......}中就可以啦!

希望能帮助到大家~

你可能感兴趣的:(c语言,p2p,图论)