【C语言】C语言中EOF的具体用法

这篇具有很好参考价值的文章主要介绍了【C语言】C语言中EOF的具体用法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

在C语言中存在关键字EOF
EOF是一个整数类型的宏定义,扩展为负数常量表达式(通常为-1)。它被头文件中的好几个函数作为返回值使用,来表明已经到达文件尾或者示意一些其他的错误条件。它也被作为一个值来表示无效的字符。

这样的概念比较难理解,我们用代码的形式解释

我在VS2022编译器下创建了test.c文件,写一段简单代码,选中EOF右键点击转到定义
【C语言】C语言中EOF的具体用法
点击转到定义后发现关键字EOF的定义被保存在头文件stdio.h中
且被定义为-1;
【C语言】C语言中EOF的具体用法

那么EOF具体在程序中有什么作用呢?

其实在很多在线oj上,有很多题目没有给定输入的数据的数目
例如牛客网这道题目
【C语言】C语言中EOF的具体用法

题目链接:https://www.nowcoder.com/practice/8312e497509a450f968d9a6a2381ce32?tpId=107&&tqId=33323&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking

我们可以看到在这道题目的输入描述中出现多组输入但是并没有告诉我们具体数量,在这个时候就需要用到EOF;

scanf返回值的了解

在知道如何用EOF解决上述问题时,我么要先知道C语言中的关键字scanf
scanf 的功能用一句话来概括就是“通过键盘给程序中的变量赋值”。
【C语言】C语言中EOF的具体用法
在MSDN上对scanf的返回值做出了解释
scanf函数是有返回值的。
一般来说,它的返回值是成功读取的元素个数。但当遭遇读取失败时,它的返回值便是 -1 (也就是它自己返回一个EOF) 。
而若是一个元素都还没成功读入的时候就遇到了读取失败或EOF,那它直接就会返回-1,不管后面再输入了什么。

例如:

#include<stdio.h>
int main()
{
	int b = 0, c = 0;
	int a = scanf("%d", &b);//这里scanf格式化输入的数据个数是1
	printf("%d", a);
	return 0;
}

【C语言】C语言中EOF的具体用法
我们可以看到将scanf的返回值给到a后,a的值是1

#include<stdio.h>
int main()
{
	int b = 0, c = 0;
	int a = scanf("%d%d", &b,&c);//这里scanf格式化输入的数据个数是2
	printf("%d", a);
	return 0;
}

我们可以看到将scanf的返回值给到a后,a的值是2

如果b被成功赋值,而c没有,则返回1
【C语言】C语言中EOF的具体用法

如果b没有成功赋值,c成功赋值,则返回EOF,且给c所赋的值也不会传入c
(我使用的编译器在这里有些小bug,必须输入三次ctrl+z)
【C语言】C语言中EOF的具体用法
这就是scanf返回值的基本情况

EOF使用

我们可以写出以下代码
此代码可以实现一直输入

#include<stdio.h>
int main()
{
	int a = 0;
	while (scanf("%d", &a) != EOF)//循环输入a
	{
		printf("%d\n", a);//打印a
	}
	return 0;
}

因为scanf只读取一个数据,所以返回值是1,所以无论输入多少,循环都会一直进行下去,类似“死循环”。
效果如下:
【C语言】C语言中EOF的具体用法

到这里EOF相关的用法已经解释完毕

希望我的博客能对你的学习有所帮助,如果有错误欢迎积极指出。

所用编译器 VS2022文章来源地址https://www.toymoban.com/news/detail-474734.html

到了这里,关于【C语言】C语言中EOF的具体用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C#关键字Virtual用法详解

    本篇讲解C#Virtual用法 目录 定义 特性 实例 virtual 用于修饰方法、属性、索引器或事件声明,并且允许在派生类中重写这些对象。 虚拟成员的实现可由派生类中的重写成员更改

    2024年02月15日
    浏览(50)
  • sql中的explain关键字用法

    在SQL中,使用 EXPLAIN 可以获取查询的执行计划,以便进行性能优化和查询调优。执行计划提供了关于查询操作的详细信息,涵盖了多个表头字段,每个字段都提供了特定的信息。以下是explain表头字段解释: id :每个操作的唯一标识符。这个字段通常是一个递增的整数

    2024年01月18日
    浏览(45)
  • this关键字的四种用法

    表示对象自己的属性使用this调用成员变量,解决变量与局部变量之间的冲突问题 代码如下(示例): 代码如下(示例): 控制台运行结果: 分析:为什么会出现这种情况呢?当我们调用构造方法所传递的三个参数值“张三”、20和178.5最终并没有赋值到对象的三个属性中。

    2023年04月22日
    浏览(47)
  • Java中 private关键字 详细用法及解释

    ​ 出于 安全性考虑 ,我们在写字段时,尽量考虑采用 封装 ,这样可以隐藏类的细节,只对外开放接口即可实现对象之间的交互。 private是 一个 访问限定修饰符 可修饰的的范围: 修饰成员变量: 表示当前成员变量 只能在当前类中使用 修饰成员方法: 表示当前成员方法 只

    2024年02月03日
    浏览(55)
  • C语言中EOF的意义与用法

    EOF,为End Of File的缩写,通常在文本的最后存在此字符表示资料结束。 在微软的DOS和Windows中,读取数据时终端不会产生EOF。此时,应用程序知道数据源是一个终端(或者其它“字符设备”),并将一个已知的保留的字符或序列解释为文件结束的指明;最普遍地说,它是ASCII码

    2024年02月14日
    浏览(34)
  • MySQL中这些关键字的用法,佬们get到了嘛

    前言: 最近粉丝问了一个问题,是关于Limit分页的用法,他没有理解清楚,因此本篇文章主要讲解 MySQL的 的知识。该专栏比较适合刚入坑Java的小白以及准备秋招的大佬阅读。 如果文章有什么需要改进的地方欢迎大佬提出,对大佬有帮助希望可以支持下哦~ 小威在此先

    2024年02月12日
    浏览(41)
  • 【python基础】python中的with关键字及其相关用法

    目录 1.with  2.上下文管理器  3.总结  4.with torch.no_grad()的用法 在Python中, with 是一个,用于处理上下文管理器(context manager)。上下文管理器是一种对象,它定义了在进入和离开某个上下文时应该执行的操作。 with  语句使代码更清晰、更具可读性, 它简化了文

    2024年02月16日
    浏览(53)
  • C/C++面试常见问题——const关键字的作用和用法

    首先我们需要一下const的定义, const名叫常量限定符 , 当const修饰变量时,就是在告诉编译器该变量只可访问不可修改,而编译器对于被const修饰的变量有一个优化,编译器不会专门为其开辟空间,而是将变量名和数值作为一个kv键值对存入到符号表中。 注意:const修饰

    2024年02月08日
    浏览(46)
  • C++面试八股文:static和const的关键字有哪些用法?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第7面: 面试官:C++中, static 和 const 的有哪些用法? 二师兄: satic 主要用在以下三个方面:1.用在全局作用域,修饰的变量或者函数为静态的,限制在本文件内使用。2.方法内修饰修饰静态局部变量,在第一次访问

    2024年02月08日
    浏览(48)
  • 全面理解java中的构造方法以及this关键字的用法(超详细)

    Hello,各位铁汁们!我是小🐟儿哈!今天我又来更新我的Java基础学习博客了。 本篇主要内容概述: 1、🍚如何用构造方法初始化对象 2、🍚为啥要有this这个 3、🍚this.属性名访问成员变量、成员方法 4、🍚this.方法名 || this.()的用法 目录 初识构造方法  构造方法的使

    2023年04月09日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包