那么EOF具体在程序中有什么作用呢?
其实在很多在线oj上,有很多题目没有给定输入的数据的数目
例如牛客网这道题目
题目链接:https://www.nowcoder.com/practice/8312e497509a450f968d9a6a2381ce32″ />scanf返回值的了解
在知道如何用EOF解决上述问题时,我么要先知道C语言中的关键字scanf
scanf 的功能用一句话来概括就是“通过键盘给程序中的变量赋值”。
在MSDN上对scanf的返回值做出了解释
scanf函数是有返回值的。
一般来说,它的返回值是成功读取的元素个数。但当遭遇读取失败时,它的返回值便是 -1 (也就是它自己返回一个EOF) 。
而若是一个元素都还没成功读入的时候就遇到了读取失败或EOF,那它直接就会返回-1,不管后面再输入了什么。例如:
#includeint main(){int b = 0, c = 0;int a = scanf("%d", &b);//这里scanf格式化输入的数据个数是1printf("%d", a);return 0;}
我们可以看到将scanf的返回值给到a后,a的值是1#includeint main(){int b = 0, c = 0;int a = scanf("%d%d", &b,&c);//这里scanf格式化输入的数据个数是2printf("%d", a);return 0;}
我们可以看到将scanf的返回值给到a后,a的值是2
如果b被成功赋值,而c没有,则返回1
如果b没有成功赋值,c成功赋值,则返回EOF,且给c所赋的值也不会传入c
(我使用的编译器在这里有些小bug,必须输入三次ctrl+z)
这就是scanf返回值的基本情况EOF使用
我们可以写出以下代码
此代码可以实现一直输入#includeint main(){int a = 0;while (scanf("%d", &a) != EOF)//循环输入a{printf("%d\n", a);//打印a}return 0;}
因为scanf只读取一个数据,所以返回值是1,所以无论输入多少,循环都会一直进行下去,类似“死循环”。
效果如下:
到这里EOF相关的用法已经解释完毕
希望我的博客能对你的学习有所帮助,如果有错误欢迎积极指出。
所用编译器 VS2022