多组数据的输入方法(c语言实现)
1.EOF法
因为在线评测系统的输入数据存放在一个文件中,因此可以通过文件是否结束的方式判断输入的数据是否结束。scanf在读取到文件结束符时,会返回标识EOF(end of life),EOF是一个预定义的常量,等于-1。通过判断scanf的返回值否为EOF决定是否退出循环。
例题:给定两个整数a,b,求这两个数之和
【输入】
输入数据有多行。每行数据中含有两个整数a,b(0<=a,b<=109)
【输出】
对每行数据,输出对应的a+b的值。
【样例输入】
123 500
60 80
70 90
【样例输出】
623
140
160
【代码实现】
#include <stdio.h>
int main()
{
int a,b;
while(scanf("%d%d",&a,&b)!=EOF)
{
printf("%d\n",a+b);
}
return 0;
}
2.计数法
在有些题目中,先给一个正整数,告诉数据输入的组数,然后根据这个数组进行读取。
例题:给定两个整数a,b,求这两个数之和
【输入】
输入数据中的第一行是一个正整数T(0<=T<=100)。接下来有T行数据。每行数据中含有两个整数a、b(-103<=a,b<=103)
【输出】
对每行数据,输出对应的a+b的值。
【样例输入】
2
123 500
60 80
【样例输出】
623
140
【代码实现】
#include <stdio.h>
int main()
{
int T;
scanf("%d",&T);
for(int i=0;i<=T;i++)
{
int a,b;
scanf("%d%d",&a,&b);
printf("%d\n",a+b);
}
return 0;
}
3.哨兵法
有些问题中不告诉循环次数,而是给定一个特殊值,表示输入的结束。这个特殊值被称为哨兵,因此这个输入方法称为哨兵法。
例题:给定两个整数a,b,求这两个数之和
【输入】
输入数据有多行。每行数据中含有两个整数a,b(0<=a,b<=109)。最后一行数据是0 0,标志输入结束。0 0一行本身不需要计算输出。
【输出】
对每行数据,输出对应的a+b的值。
【样例输入】
123 500
60 80
0 0
【样例输出】
623
140
【代码实现】
#include <stdio.h>
int main()
{
int a,b;
scanf("%d%d",&a,&b);
while(a!=0||b!=0)
{
printf("%d\n",a+b);
scanf("%d%d",&a,&b);
}
return 0;
}
- 比较(纯个人心得体会)
1.EOF法常用于不知道几组数据,用while循环,利用scanf()的返回值结束时为EOF。
2.计数法用于知道几组数据,用for循环。
3.哨兵法用于不知道几组数据,用while循环。利用当遇到特殊值哨兵(最后输入的数据)时结束。