【C语言】EOF搭配while循环来控制scanf输入的次数

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

目录

EOF是什么?

EOF搭配while的实际应用场景1

EOF搭配while的实际应用场景2

补充

后言


EOF是什么?

EOF, 在C语言的标准函数库中表示文件结束符(end of file)。在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。

在文本文件中,数据都是以字符的ASCII代码值的形式存放。我们知道,ASCII代码值的范围是0~127(ASCII的取值范围应该为0~255,0~127保留的是英文、数字和标准符号,128~255是后面进行拓展的ASCII),不可能出现-1,但正好EOF是定义在头文件<stdio.h>的常量EOF的本质是-1(ASCLL)。因此可以用EOF作为文件结束标志

还有很多文件处理函数处错误后的返回值也是EOF,因此常被用来判断调用一个函数是否成功。


EOF搭配while的实际应用场景1

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

当上面的程序运行时,如果不加" != EOF",那么这个程序就是个死循环,会一直运行下去。

但如果加上" != EOF"后该程序就不是死循环了,如果在终端不进行输入该程序会自动结束。

(while的意思就是说当前输入缓存还有东西时就一直读取,直到输入缓存中的内容为空时停止)


如何结束程序呢?

在终端(黑框)中手动输入时,系统并不知道什么时候到达了所谓的“文件末尾”。

因此需要用<Ctrl + z>组合键然后按 Enter 键的方式来告诉系统已经到了EOF,这样系统才会结束while。

以下题为例:

 【C语言】EOF搭配while循环来控制scanf输入的次数

 【C语言】EOF搭配while循环来控制scanf输入的次数

·从上代码可见,在VS2019的情况下,需要三次<Ctrl + z>组合键

·上面我们说了EOF的本质是-1,这里又有小伙伴迷惑了,那scanf怎么能和-1相比较呢?

其实scanf函数返回值实际读到数据的个数。例如我们输入4,那我们的scanf函数读到的数据个数就是1,1不等于-1,进入while循环。【C语言】EOF搭配while循环来控制scanf输入的次数

【C语言】EOF搭配while循环来控制scanf输入的次数

参考scanf函数详解

我们不论在scanf函数中输入什么,要让读到数据的个数永远都不可能等于-1(即让scanf读取正常),这样循环就不停止,就可以多组输入。以下面写法也是正确的。

while(scanf("%d",%i) == 1)

如果输入正常,则scan返回值为输入数据的个数(>=1的值),所以while循环条件为真,执行循环。

直到scanf输入为假(Ctrl+Z或者输入类型不匹配的数据类型),则返回值为-1或者0。因为scanf返回值不等于1,所以while循环条件为假,不再执行循环。


EOF搭配while的实际应用场景2

#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main() {

    int ch;
    while ((ch = getchar()) != EOF) putchar(ch);

}

【C语言】EOF搭配while循环来控制scanf输入的次数

 从上面代码和运行结果可以看出,EOF搭配while可以控制 字符串输入个数。

当然用法不止这些,需要自己去探索


补充

当系统在检测缓冲区中是否含有流结束标志时,有两种检测方式:阻塞式和非阻塞式

1.阻塞式:指的是只有在回车键按下之后,才会对缓冲区中是否含有ctrl+z组合键进行检查。需要注意的是,当缓冲区中含有可读数据时,ctrl+z就不是结束标志。我们需要明白,ctrl+z产生的并不是一个普通的ASCⅡ码值,也就是说它不会跟其他从键盘上输入的字符一样,它是不能够存放在输入缓冲区中的。

2.非阻塞时:指的是一旦按下ctrl+d之后立即响应。

如果之前没有输入字符,那么ctrl+d就是流结束标志。

如果之前已经输入了字符,那么ctrl+d此时就相当于回车不再是流结束标志,并且具有回车的功能(将输入字符送入缓冲区),并且这个回车自己也会进入缓冲区!!!

当然了windows系统一般采用阻塞式检查(ctrl+z),linux系统一般采用非阻塞式检查(ctrl+d)
 


后言

本篇作为本人刚开始学习以来第一篇技术性博客,可能存在没解释通、漏解释、或者解释错误的地方。希望各位可以在评论区指出我的问题,如果可以得到您的解决方案,我将不胜感激。文章来源地址https://www.toymoban.com/news/detail-496317.html

到了这里,关于【C语言】EOF搭配while循环来控制scanf输入的次数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • C语言的while循环、do-while循环、for循环

    1 while循环 一般形式为: 意思是,先计算“表达式”的值,当值为真(非0)时, 执行“语句块”;执行完“语句块”,再次计算表达式的值,如果为真,继续执行“语句块”……这个过程会一直重复,直到表达式的值为假(0),就退出循环,执行 while 后面的代码 2 do-while循

    2024年02月10日
    浏览(52)
  • 【C语言】连续使用多个scanf函数时输入数据

    在多次使用scanf函数时常常会出现下面的情况: 运行下列代码: (1)有关回车(Enter) 从键盘中输入: 按回车(Enter)后输入: 按回车(Enter)后运行结果为: (2)有关空格 从键盘中输入(含空格): 按回车(Enter)后运行结果为: 运行下列代码: (1)有关回车(Enter)

    2024年02月06日
    浏览(48)
  • 【C语言】scanf多组输入的三种方法!

    🎬 鸽芷咕 :个人主页  🔥 个人专栏 :《C语言初阶篇》 《C语言进阶篇》 ⛺️生活的理想,就是为了理想的生活!    🌈 hello! 各位宝子们大家好啊,相信大家都多多少少了用过scanf语句吧,但是对scanf函数没有全面的认识仅仅只是知道可以输入。    ⛳️ 今天博主就给大

    2024年02月06日
    浏览(46)
  • C++ While 和 For 循环:流程控制全解析

    使用 switch 语句选择要执行的多个代码块之一。 语法 它的工作原理如下: switch 表达式被评估一次 表达式的值与每个 case 的值进行比较 如果找到匹配项,则执行关联的代码块 break 和 default 是可选的 下面的示例使用星期几的数字来计算星期几的名称: 示例 当 C++ 遇到

    2024年04月08日
    浏览(60)
  • Jmeter——循环控制器中实现Counter计数器的次数重置

    近期在使用Jmeter编写个辅助测试的脚本,用到了多个Loop Controller和Counter。 当时想的思路就是三个可变的数量值,使用循环实现;但第三个可变值的数量次数,是基于第二次循环中得到的结果才能确认最终次数,每次的结果还会有不一样的情况。基于思路,先写了个线性脚本

    2024年03月18日
    浏览(57)
  • 【C语言基础考研向】05 scanf读取标准输入超详解

    文章目录 一.scanf函数的原理 样例 问题原因 解决方法 二.多种数据类型混合输入 错误样例 正确样例   C语言未提供输入/输出,其输入和输出是通过标准函数库来实现的。C语言通过scanf函数读取键盘输入, 键盘输入又被称为标准输入 。当scanf函数读取标准输入时,如

    2024年01月22日
    浏览(47)
  • Python条件控制和循环语句(if while for )

    同样需要注意冒号和缩进。另外,在 Python 中没有 do..while 循环。 while+else whlie+break break跳出本层循环的含义 标志位的使用 while+continue 死循环: 程序中坚决不能出现死循环 for循环不会出现死循环,它的循环条件不是我们来控制,是人家内部已经控制好了 for循环和while循环都是

    2024年02月11日
    浏览(48)
  • c语言之while循环

    while循环语法格式是 while(表达式)语句 这里的语句可以是代码块,用{}表示 比如要显示0-10000年的所有闰年 代码如下 而用python去实现相同的功能代码如下

    2024年02月19日
    浏览(55)
  • 【C语言】while循环语句

    🎈个人主页:豌豆射手^ 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:C语言 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步! 引言 在C语言编程中,循环结构是一种强大的工具,能够重复执行一段代码,直到满足特定条件。而

    2024年03月18日
    浏览(62)
  • C 语言用户输入详解:scanf、fgets、内存地址解析及实用指南

    您已经学习了 printf() 函数用于在 C 语言中输出值。 要获取用户输入,可以使用 scanf() 函数: scanf() 函数接受两个参数:变量的格式说明符(在本例中为 %d )和引用运算符( myNum ),用于存储变量的内存地址。 scanf() 函数还允许进行多个输入(例如,在下面的例子中,用户可

    2024年02月03日
    浏览(60)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包