【C语言中的EOF】零基础看懂EOF如何使用while(scanf(“%d %d”,&a,&b)感叹号=EOF)

🌟前言

如今我们努力奔跑,不过是为了追上那个曾经被寄予厚望的自己!
1
【👻👻👻大家好,我是姜姜爱柚子,将在这里分享所学所得,如果有不正确的地方,希望大家多指正哦💝】
【如果喜欢我的文章,记得点赞关注收藏💡哦,姜姜会持续更新的📝】


💛在大家初学C语言的时候,会不会偶尔遇到一两个小问题不理解要思考好久
姜姜就属于那种脑子笨笨的转不过来的人哈哈😵
💛这次我分享下我在做题的时候遇到的 while(scanf(“%d %d”,&a,&b)!=EOF)
💛欢迎在评论区互相交流哦


请添加图片描述

---------------------- 屏幕前的你还不快来学习-----------------------
---------------------------------🍰🍰🍰🍰🍰🍰🍰🍰🍰🍰--------------------------------

🌟 EOF的含义

EOF是一个计算机语言,为End Of File的缩写,在操作系统中表示资料源无更多的资料可以读取;在文本的最后作为文本的结束标志

1. 操作系统中的EOF

操作系统如Linux之中,EOF不是一个字符,而是当系统读到文件结尾,所返回的一个信号值(-1),【怎么知道文件长度,资料只提到了比较文件的长度,这个后期研究了再讲。】

2.C语言中的EOF(着重讲)

C语言中(更精确地说成C标准数库中),EOF一是定义的一个宏表示文本结束的标志;二是用来判断调用一个函数是否成功(因为很多文件处理函数处错误后的返回值也是EOF)
注意:在一中:EOF其实不是一个字符,它是被定义为int类型的一个负数(比如-1)

+ 为什么用EOF作为文本结束标志(对应一)

因为在while循环中以EOF作为文本结束的文件必须是文本文件,而在文本文件中,数据都是以字符的ASCII代码值的形式存放,而我们都知道ASCII代码值的范围是0~127,不可能出现(-1等负数),因此可以用EOF作为文本结束的标志。


+如何理解C语言中的EOF(对应二)

你在用函数读入文件数据的时候,函数总会返回一个状态,是读取成功还是失败,这个状态怎么表示,所以约定俗成定义EOF表示这个状态

🌟 对while(scanf(“%d %d”,&a,&b)!=EOF)的思考

1.式子的适用范围以及例题

适用范围:题目有多组输入数据,并且数据没有固定量问题
例题:

在这里插入图片描述

#include <stdio.h>
int main()
{
    int a,b;
    while(scanf("%d %d",&a,&b)!=EOF)
    {
        if(a==b)
        {
            printf("%d=%d\n",a, b);
        }
        else if(a>b)
        {
            printf("%d>%d\n",a,b);
        }
        else
        {
            printf("%d<%d\n",a,b);
        }
    }
    return 0;
}

一般C在读取数据时,都是按流模式进行数据读操作,这里的可以是文件,也可以是标准输入。EOF可以表示文件结尾,还可以表示标准输入的结尾。但是,标准输入与文件不一样,无法事先知道输入的长度,必须手动输入一个字符,表示到达EOF。
那如何结束程序呢??
❗️❗️一.可以手动输入来告诉系统已经到达EOF:1.win用<Ctrl+z>组合键 2.Unix/Mac/Linux中用<Ctrl+d>(以上均需先按下Ctrl,不要抬起再按住z,d)
二.可以以某一特定结束符作为终止标志(将在下面的3中详细讲述)


注:这篇文章上面这个例子就是标准输入,下面将介绍标准输入

2.了解格式化输入函数scanf

scanf的语法定义: scanf(“<格式化字符串>”,<地址表>)
scanf函数如果返回成功:返回赋值的数据项数
返回出错:返回EOF
注意scanf函数返回int型
例如:scanf(“%d %d”,&a,&b)
如果a、b均赋值成功➡️返回2
只是a赋值成功➡️返回1
a、b都不成功➡️返回0
出错的时候➡️返回EOF
(再次说明:EOF不是一个字符,它被定义为是int类型的一个负数-1)
如果我们输入了一个值那么返回就为1,
1 != -1➡️ scanf(“%d”,&n) != EOF
while(scanf(“%d”,&n) != EOF) 中while(A)语句中的事件A是正确的即1(非负),while(1){ }➡️进行下一循环。
【while是一个循环函数,while后面()是一个判别表达式,表达式返回值为真,即(!=EOF),则进入循环】,即只要输入不出错,while为死循环,但可以手动结束。

3.这个程序如何结束?

一:题目有多组输入数据,并且数据没有固定量问题,只给出以某一特定标识符作为结束标志,结束输入数据。常见是以输入0作为结束标志。
二:题目有多组输入数据,并且数据没有固定量问题,结束没有固定标识符,以手动结束输入循环。


分析一:以某一特定结束符作为终止循环的条件,通常是将0作为终止标志。
解决方法:while( scanf(“%d”,&n) != EOF, n ){ }
(我们来看括号中的n代表的是若我们在前一句输入的是0(&n取0),即此时n = 0(0表示“假”)即表达式需要结束循环,即实现了结束多次输入数据。)
若是-1作为终止标志,可以这样写while( scanf(“%d”,&n) != EOF, n != -1) { }
(输入-1时,n此时==-1,则表达式n != -1为 -1,结束循环。)(这句不理解看下面蓝色标注)
“,”号运算符作用:while后的括号为循环体的执行条件,其值取逗号运算后的值。
分析二:手动结束多组输入
解决方法:可以手动输入来告诉系统已经到达EOF:1.win用<Ctrl+z>组合键 2.Unix/Mac/Linux中用<Ctrl+d>(以上均需先按下Ctrl,不要抬起再按住z,d)然后结束while循环


原文链接:https://blog.csdn.net/weixin_57253110/article/details/121072575

  • 40
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 18
    评论
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姜姜爱柚子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值