专栏首页Flaneur的文章分享OJ刷题-while(scanf("%d",&n)!=EOF)

OJ刷题-while(scanf("%d",&n)!=EOF)

前言

        “测试输入包含若干测试实例。当N为0时,输入结束,该实例不被处理。”这句话 是最早我对OJ的印象 以前也没见过这种输入要求, 做第一道题的时候就卡住了 上网看别人的代码 都有一句 while(scanf(“%d”,&n)!=EOF)”scanf 函数还能放while里啊… EOF是什么玩意儿呢…”

什么是OJ?

        首先先介绍下什么是OJ吧(知道的同学可以跳过此部分)         Online Judge系统(简称OJ)是一个在线的判题系统。用户可以在线提交程序多种程序(如C、C++)源代码,系统对源代码进行编译和执行,并通过预先设计的测试数据来检验程序源代码的正确性。

        一个用户提交的程序在Online Judge系统下执行时将受到比较严格的限制,包括运行时间限制,内存使用限制和安全限制等。用户程序执行的结果将被Online Judge系统捕捉并保存,然后再转交给一个裁判程序。该裁判程序或者比较用户程序的输出数据和标准输出样例的差别,或者检验用户程序的输出数据是否满足一定的逻辑条件。最后系统返回给用户一个状态:通过(Accepted,AC)、答案错误(Wrong Answer,WA)、超时(Time Limit Exceed,TLE)、超过输出限制(Output Limit Exceed,OLE)、超内存(Memory Limit Exceed,MLE)、运行时错误(Runtime Error,RE)、格式错误(Presentation Error,PE)、或是无法编译(Compile Error,CE),并返回程序使用的内存、运行时间等信息。

        Online Judge系统最初使用于ACM-ICPC国际大学生程序设计竞赛和OI信息学奥林匹克竞赛中的自动判题和排名。现广泛应用于世界各地高校学生程序设计的训练、参赛队员的训练和选拔、各种程序设计竞赛以及数据结构和算法的学习和作业的自动提交判断中。

        知名的OJ有:RQNOJ,URAL,SPOJ,vijos,tyvj,USACO,sgu,pku(poj),zju(toj),tju,uva,HDU(HDOJ)等。

EOF是什么东东?

        EOF 是一个宏 ,一般定义为-1。 1.EOF用来判断文件结束的标记(end of file) 用在文件操作中,可以查下msdn 看它的定义:EOF is returned by an I/O routine when the end-of-file (or in some cases, an error) is encountered 2.EOF表示输入流的结束。 3.在发送端套接字关闭后,接收端读套接字的read函数也会返回EOF.

while(scanf()!=EOF)流程图

        我们学过的有三种循环:for,while,do-while。但while (scanf(“%d”, &n) != EOF)不像以上的任何一种,接下来看一下它的流程图:

OnlineJuge的评判时,该语句的作用

        OJ评判的原理应该是这样的:         输入:通过管道命令,将一个包含若干测试用例的文件作        为【标准输入流】,所以需要while(scanf() != EOF)来判断测试文件是否读完。         输出:通过管道命令,将【标准输出流】,输出到一个文件中。         评判:将程序的【输出文件】与【正确答案文件】进行比对:如果一样,则返回程序正确提示;否则返回程序错误的提示。

使用原理

有人说 EOF等于-1 其实就是scanf函数的返回值 不等于-1时 继续进行循环

有人说 EOF是处理到文件结束 不用EOF也可以

……….

很多天后终于把这个弄明白了

scanf的返回值由后面的参数决定

scanf(“%d%d”, &a, &b);

如果a和b都被成功读入,那么scanf的返回值就是2

如果只有a被成功读入,返回值为1

如果a和b都未被成功读入,返回值为0

如果遇到错误或遇到end of file,返回值为EOF,且返回值为int型.

总结

        以上是我个人所述,若有什么不对的地方或者有补充的地方,还希望各位指点指点,大家可以一起学习,一起进步!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 浅谈机器学习-回归与分类的区别

            机器学习的主要任务便是聚焦于两个问题:分类和回归。本文将浅谈下两者的区别。

    Flaneur
  • python动态规划解决矩阵连乘

            动态规划算法与分治法类似,其基本思想也就是将待求解的问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解,简单概括为自顶向下...

    Flaneur
  • 人工神经网络(ANN)

            初学人工智能不久,今天碰上了人工神经网(ANN),开始学的时候很懵,一大堆理论、公式、推导…..作为一名小白,还是很痛苦的,不过经过摸索,大概了...

    Flaneur
  • C语言中EOF是什么意思?

    相信很多朋友在学习C语言过程中,都看到过EOF的字样,但翻过整本C语言的书,也没有看到有这个函数或者关键字的,岂不是感觉很奇怪?难道学的不细有疏漏吗?当然不是!...

    编程范 源代码公司
  • Java使用zxing生成二维码(带有logo)

    崔笑颜
  • 【编程经验】C语言中EOF是什么意思

    C语言中EOF的意思 今天跟大家说道说道这个C语言中EOF是什么意思。 相信很多朋友在学习C语言过程中,都看到过EOF的字样,但翻过整本C语...

    编程范 源代码公司
  • 微信公众号可通过现金红包接口发放微信支付现金红包(附开发教程)

      农历新年将至,支付宝红包打了一仗,微信在朋友圈屏蔽了它的分享,但单防守还不行,进攻才是最好的防守。昨日,微信支付现金红包接口正式开放,只需开通微信支付,即可...

    ytkah
  • Workaround for Search for my account in MyAppointment

    版权声明:本文为博主汪子熙原创文章,未经博主允许不得转载。 https://jerry.bl...

    Jerry Wang
  • 联想凌拓“开门红”,揭示中国用户最大“痛点”

    马云说过:企业价值大小决定于解决“痛点”的能力,解决的问题越重要,企业的价值越大。不要去争当“首富”,而是要争当“首负”,必须对用户、对社会负责。一句话,企业的...

    用户5498443
  • 自动化测试 selenium 环境搭建

    做 web 项目,测试是无法避免的。对于某些特定功能,采用单元测试就行。但如果想对网站进行整体测试,人工点击测试可行但有点累,如果能借助自动化测试工具就更好了。...

    py3study

扫码关注云+社区

领取腾讯云代金券