杭电1000

竞赛练习平台(全天候可用):acm.dingbacode.com

参考文章链接:https://blog.csdn.net/m0_52138323/article/details/112715680

A+B for Input-Output Practice (I)
在这里插入图片描述
(忽略沙雕的自言自语)
计算a+b的和,我打眼一瞧就觉得此题so easy,简直是瞧不起我叶某人,我chuachuachua就敲完了代码,提交!!!
代码:

#include<stdio.h>
int main()
{
    int a,b;
    int i=0;
    while(i!=-1)
    {
        scanf("%d%d",&a,&b);
        printf("%d\n",a+b);
        i++;
    }
}

1.Compilation Error(编译错误),原因应该是我用C语言编写代码,但提交的语言选择了JAVA
2.Time Limit Exceeded(超时),超时原因是循环终止条件出错/过于宽泛。删除循环,修改代码为:

#include<stdio.h>
int main()
{
    int a,b;
        scanf("%d%d",&a,&b);     
        printf("%d\n",a+b); 
}

3.Wrong Answer(结果出错),看来循环是必须的,修改代码为:

#include<stdio.h>
int main()
{
    int a,b;
    while(scanf("%d%d",&a,&b)!=EOF)
    {     
        printf("%d\n",a+b);
    }
}

转载自:https://blog.csdn.net/MTOY_320/article/details/78363375?locationNum=7&fps=1
4.Time Limit Exceeded(超时),依旧超时,t添加return 0,终止main函数。修改代码为:

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

5.我尝试在1的基础上直接添加return 0,但是还是超时。
我觉得本小节中的知识点有:
(1)细心,当用c编译时,检查不要用其他语言提交
(2)c和g++的区别,查了一下,没有找到比较笼统的说法,为了不误导大家,建议自查
(3)程序超时有多种原因,其中循环条件出错的解决方法是重点
关于 Process to end of file:计算机操作系统要以某种方式判断文件的开始和结束,在C语言中检测文件结尾的一种方法是:在文件结尾放一个特殊的字符来标记文件结尾。通常,在C语言中,用getchar()或scanf()函数读取文件检测到文件结尾时返回一个特殊的值,即EOF(end of file的缩写)。
关于 EOF:
EOF是一个值,标志着检测到文件结尾,并不是在文件中可以找到的符号。
EOF在stdio.h中已经被定义过,不需要重新定义。
一般情况下EOF的值为-1,因为getchar()函数的返回值通常在0—127之间(对应标准字符集),当系统所识别的范围超过标准字符集,则函数的返回值可能在0—255之间,而-1则无论那种情况都不会被检测到,该值作为文件结尾恰到好处;
关于多组数据的输入while((scanf())!=EOF):
while(scanf()!=EOF),代表的意思是可持续输入,直到scanf返回的值是-1时才会停止输入,实现了多组数据的输入。
我们也可以在while里面加上一些约束条件,这样的话输入在特定的条件下就会停止,我们也可以通过输入完成后按Ctrl+z(好多微型计算机都把Ctrl+z识别为文件结尾的信号),可以强行停止输入。
因为scanf函数需要有一个返回值, 当你在持续输入时,scanf就永远不会返回-1,当你通过某种方式,比如按下ctrl+z停止输入后,scanf就会返回-1,此时等价于EOF,则这个循环就跳出停止。

(4)函数中return 0的用法与作用,我不太理解,所以没有写在这里。

补充JAVA代码:

import java.util.Scanner;
public class Main{
	public static void main(String[] args){
		Scanner scanner=new Scanner(System.in);
		while(scanner.hasNextInt()){
			int a=scanner.nextInt();
			int b=scanner.nextInt();
			int m=a+b;
			System.out.println(m);
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个叶绿体

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值