输入_第一类:
输入不说明有多少个Input Block,以EOF为结束标志。
例1:
Description:
你的任务是计算a+b
Input
输入包含多行数据,每行有两个整数a和b,以空格分开。
Output
对于每对整数a,b,输出他们的和,每个和占一行。
Sample Input
1 5
10 20
Sample Output
6
30
#include <stdio.h>
int main()
{
int a,b;
while(scanf("%d %d",&a, &b) != EOF) printf("%d\n",a+b);
}
本类输入解决方案:
C语法:
while(scanf("%d %d",&a, &b) != EOF)
{
....
}
C++语法:
while( cin >> a >> b )
{
....
}
说明:
1. Scanf函数返回值就是读出的变量个数,如:scanf( “%d %d”, &a, &b );
如果只有一个整数输入,返回值是1,如果有两个整数输入,返回值是2,如果一个都没有,则返回值是-1。
2. EOF是一个预定义的常量,等于-1。
输入_第二类:
输入一开始就会说有N个Input Block,下面接着是N个Input Block。
例2:
Description:
你的任务是计算a+b
Input
输入包含多行数据,第一行有一个整数N,接下来N行每行有两个整数a和b,以空格分开。
Output
对于每对整数a,b,输出他们的和,每个和占一行。
Sample Input
2
1 5
10 20
Sample Output
6
30
#include <stdio.h>
int main()
{
int n,i,a,b;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d %d",&a, &b);
printf("%d\n",a+b);
}
}
本类输入解决方案:
C语法:
scanf("%d",&n) ;
for( i=0 ; i<n ; i++ )
{
....
}
C++语法:
cin >> n;
for( i=0 ; i<n ; i++ )
{
....
}
输入_第三类:
输入不说明有多少个Input Block,但以某个特殊输入为结束标志。
例3:
Description:
你的任务是计算a+b
Input
输入包含多行数据,每行有两个整数a和b,以空格分开。测试数据以0 0结束。
Output
对于每对整数a,b,输出他们的和,每个和占一行。
Sample Input
1 5
10 20
0 0
Sample Output
6
30
#include <stdio.h>
int main()
{
int a,b;
while(scanf("%d %d",&a, &b) &&!(a==0 && b==0))
printf("%d\n",a+b);
}
本类输入解决方案:
C语法:
while(scanf("%d",&n) && n!=0 )
{
....
}
C++语法:
while( cin >> n && n != 0 )
{
....
}
4.输入第四类:以上三种情况的组合
5.输入第五类:输入是一整行的字符串
C语法:char buf[20];gets(buf);
【说明】
(1)scanf("%s %s",str1,str2),在多个字符串之间用一个或多个空格分隔
(2)若用gets函数,应为gets(str1);gets(str2);字符串之间用回车符作分隔
(3)通常情况下,短字符用scanf函数,长字符用gets函数
(4)getchar函数每次只能接受一个字符,用c = getchar()来使用。
(5)getline是一个函数,它可以接受用户的输入的字符,直到已达到指定个数,或者用户输入了特定的字符。
函数原型:istream& getline(char line[],int size,char endchar = '\n');
char line[]:就是一个字符数组,用户输入的内容存入在该数组中
int size :最多接受几个字符?用户超过size规定的字符数将不被接受。
char endchar: 当用户输入特定字符时,自动结束。默认是回车键。