从while(scanf() != EOF)说到ACM OnlineJuge的评判原理
来源:互联网 发布:蒲公英淘客软件 编辑:程序博客网 时间:2024/06/05 01:52
前言
之前在做课程设计时, 无意间想起了以前做ACM题常用的一行语句:
忽然间对这句话作用产生了好奇,想了半天终于有了一点结果。
1. EOF是什么东东?
EOF是一个宏,许多函数(包括scanf)在读文件读到末尾时,会返回EOF。[1]
2. while(scanf()!=EOF)流程图
先看看以前学过的3种循环语句的流程图:
===================================================================================
① for循环
② while循环
③ do-while循环
===================================================================
显然,while (scanf("%d", &a) != EOF)不像以上任何一种的流程图,
那么while(scanf("%d", &a) != EOF)的流程图是怎样的?
应该是像下面这样:
3. OnlineJuge的评判时,该语句的作用
OJ评判的原理应该是这样的:
输入:通过管道命令,将一个包含若干测试用例的文件作为【标准输入流】,所以需要while(scanf() != EOF)来判断测试文件是否读完。
输出:通过管道命令,将【标准输出流】,输出到一个文件中。
评判:将程序的【输出文件】与【正确答案文件】进行比对:如果一样,则返回程序正确提示;否则返回程序错误的提示。
4. 本机运行程序时,该语句的作用。
当在本机运行程序,运行while(scanf() != EOF)时,程序会进入阻塞状态,即,
运行到上面流程图中【temp = scanf("%d", &a)】这一句 时,程序会进入到阻塞状态——在这一语句处暂停。
那么如何在本机输入的时候达到EOF的效果呢?
Linux中,在新的一行的开头,按下Ctrl-D,就代表EOF;
Windows中,Ctrl-Z表示EOF。[2]
5. 等效的语句
虽然该语句用起来很方便,却不太好理解,因此建议用以下等效的语句来代替该语句。
- 从while(scanf() != EOF)说到ACM OnlineJuge的评判原理
- 从while(scanf() != EOF)说到ACM OnlineJuge的评判原理
- while(scanf()!=EOF)的情况
- ACM之while(scanf("%d",&n)!=EOF)
- ACM之while(scanf("%d",&n)!=EOF)
- while(scanf("%d",&x) != EOF)的退出方法
- while (scanf("%d",&n)!=EOF)
- while (scanf("%d", &i) != EOF)
- while(scanf("%d",&n)!=EOF)
- while(scanf("%d",&n)!=EOF)
- while(scanf("%d",&n)!=EOF)
- while(scanf("%d",&n)!=EOF)
- 由while(scanf("%d",&n)!=EOF)引出的小问题
- 选择排序---while( scanf("%d",&n)!= EOF)与getchar()简介及其存在的问题,
- while(~scanf("%d %d",&a,&b))和while(scanf("%d %d",&a,&b)!=EOF)
- while(~scanf("%d %d",&a,&b))和while(scanf("%d %d",&a,&b)!=EOF)
- while(scanf(“%d”, &n)!= EOF)
- while(scanf("%d",&n),n)和while(scanf("%d",&n)!=EOF)和while(scanf("%d",&n)==1)和while(~scanf("%d",&n)
- Object类中定义实现的方法
- 字符串翻转和旋转问题和例题
- 数组中只出现一次的数字 C++
- 策略模式(Strategy Pattern)
- DP问题各种模型的状态转移方程
- 从while(scanf() != EOF)说到ACM OnlineJuge的评判原理
- HDU5773 The All-purpose Zero
- 二叉查找树(二叉排序树)BST解析
- [完全背包]Tyvj1199 邮票问题
- 找出字符串中连续出现次数最多的子串
- Command设计模式和java回调机制的异同
- SQL 行转列的一些思考
- 如何快速低成本搭建 DA14580/DA1458x 软硬件开发平台open-ble.org
- Quartz-JobDetail和Trigger-Job