本文共 1472 字,大约阅读时间需要 4 分钟。
本文章是杭电ACM在线刷题记录第一篇,刷题主要是为了提高自己的编程能力和快速应答能力。学习没有理由,只是想让自己变得更优秀。
Problem Description
Calculate A + B
Input
Each line will contain two integers A and B. Process to end of file.
Output
For each case, output A + B in one line.
Sample Input
1 1
Sample Output
2
这题看似是非常简单的,凡是学过c语言的人基本都能写出相应的意思,但是在在线系统上要完全正确的提交上自己的代码,还是有点难度的,下面我们就来看看几种常见的错误。
大家很容易写出如下类似普遍错误的代码:
#includeint main(void){ int a,b; scanf("%d%d",&a,&b); printf("%d\n",a+b); return 0;}
当你信心满满的将上述代码提交之后发现结果是wrong answer,什么原因呢?那就怪自己看题太粗心,再看看我们题目描述“For each case”,貌似自己的代码没有这个功能体现吧,在这里不只是一个测试用例,而是很多个,怎么体现可以使用很多个用例呢?当然是循环了,必须将输入输出语句用循环括起来。然后再把改过后的代码进行提交,发现结果是另一种报错“Output Limit Exceeded ”,看吧,有没有崩溃的感觉,这么简单的一道题竟然弄了几次还不对,顿时感觉自己弱爆了吧。下面正是我们的另一个错误。
当你还为自己的错在哪里一头雾水沉思的时候,最好的办法就是回到原题要求,看看自己还漏下什么没有体现的。当你看到“ Process to end of file.”这一句的时候恍然大悟了吧,这一句是什么意思呢?他的意思就是就是处理到文件的结束,这道题的意思就是读一个文件,把每一行的两个数字加起来,然后打印出来,直到文件末尾。这个我们就需要从scanf函数的定义说起。函数 scanf() 是从标准输入流stdio (标准输入设备,一般是键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中。
其调用形式为: scanf(“<格式说明字符串>”,<变量地址>); 变量地址要求有效,并且与格式说明的次序一致。scanf()函数返回成功赋值的数据项数,读到文件末尾出错时则返回EOF。例如:scanf("%d %d",&a,&b);
所以我们的代码中在读取流的时候必须有EOF判断,EOF其实是一个宏,他的值为-1。
好了,这是这道题常见的两种错误,做错了不要紧,积累经验,将知识慢慢捡起来你就成功了。正确的代码如下:#includeint main(void){ int a,b; while(scanf("%d%d",&a,&b)!=EOF) { printf("%d\n",a+b); } return 0;}
当你看到结果是Accept,一种自豪感油然而生。
转载地址:http://uxrdb.baihongyu.com/