一、输入:
1、只有一组测试数据,这时候是最简单的了,请看题目SDUTOJ1000。
C语言代码:
#include < stdio.h > int main() { int a,b; scanf( " %d %d " , & a, & b); printf( " %d\n " ,a + b); return 0 ; }
C++语言代码:
#include < iostream > using namespace std; int main() { int a,b; cin >> a >> b; cout << a + b << endl; return 0 ; }
2、有多组测试数据,直到读至输入文件结尾为止,这时需要用到while(scanf("%d",&n)!=EOF)或while (cin>>n),请看题目:SDUTOJ1010。
C语言代码:
#include < stdio.h > int main() { int a,b; while (scanf( " %d %d " , & a, & b) != EOF) printf( " %d\n " ,a + b); return 0 ; }
说明:scanf函数返回值就是读出的变量个数,如:scanf( “%d %d”, &a, &b );如果只有一个整数输入,返回值是1,如果有两个整数输入,返回值是2,如果一个都没有,则返回值是-1。EOF是一个预定义的常量,等于-1。
C++语言代码:
#include < iostream > using namespace std; int main() { int a,b; while (cin >> a >> b) cout << a + b << endl; return 0 ; }
3、 在开始的时候输入一个N,接下来是N组数据,请看题目:SDUTOJ1011。
C语言代码:
#include < stdio.h > int main() { int n,i; int a,b; scanf( " %d " , & n); for (i = 0 ;i < n;i ++ ) { scanf( " %d%d " , & a, & b); printf( " %d\n " ,a + b); } return 0 ; }
或者
#include < stdio.h > int main() { int n, i; int a, b; scanf( " %d " , & n); while (n -- ) { scanf( " %d%d " , & a, & b); printf( " %d\n " , a + b); } return 0 ; }
C++代码:
#include < iostream > using namespace std; int main() { int a, b, n; cin >> n; while (n -- ) { cout << a + b << endl; } return 0 ; }
4、 输入不说明有多少组数据,但以某个特殊输入为结束标志。请看题目:SDUTOJ1012,这个题目是以0 0 代表输入结束。
C语言代码:
#include < stdio.h > int main() { int a,b; while (scanf( " %d %d " , & a, & b) && (a || b)) printf( " %d\n " ,a + b); }
C++语言代码:
#include < iostream > using namespace std; int main() { int a ,b; while (cin >> a >> b && (a || b)) {cout << a + b << endl;} return 0 ; }
5、还有一种是前几种的组合,请看题目:SDUTOJ1013。
C语言代码:
#include < stdio.h > int main() { int n,sum,a; while (scanf( " %d " , & n) && n) { sum = 0 ; while (n -- ) { scanf( " %d " , & a); sum += a; } printf( " %d\n " ,sum); } return 0 ; }
C++语言代码:
#include < iostream > using namespace std; int main() { int n,sum,a; while (cin >> n && n) { sum = 0 ; while (n -- ) { cin >> a; sum += a; } cout << sum << endl; } return 0 ; }
6、输入字符串。
输入是一整行的字符串的,C语法:
char buf[20];
gets(buf);
C++语法:
如果用string buf;来保存:
如果用char buf[ 255 ]; 来保存:
scanf(“ %s%s”,str1,str2),在多个字符串之间用一个或多个空格分隔;
若使用gets函数,应为gets(str1); gets(str2); 字符串之间用回车符作分隔。
通常情况下,接受短字符用scanf函数,接受长字符用gets函数。
而getchar函数每次只接受一个字符,经常c=getchar()这样来使用。
getline 是一个函数,它可以接受用户的输入的字符,直到已达指定个数,或者用户输入了特定的字符。它的函数声明形式(函数原型)如下:
不用管它的返回类型,来关心它的三个参数:
char line[]: 就是一个字符数组,用户输入的内容将存入在该数组内。
int size : 最多接受几个字符?用户超过size的输入都将不被接受。
char endchar :当用户输入endchar指定的字符时,自动结束。默认是回车符。
结合后两个参数,getline可以方便地实现: 用户最多输入指定个数的字符,如果超过,则仅指定个数的前面字符有效,如果没有超过,则用户可以通过回车来结束输入。
char name[4];cin.getline(name,4,'\n');
由于 endchar 默认已经是 '\n',所以后面那行也可以写成:
cin.getline(name,4);
最后需要说明的是,C++的输入输出流用起来比较方便,但速度比C要慢得多。在输入输出量巨大时,用C++很可能超时,应采用C的输入输出。
二、输出:
输出有不同的格式要求,不注意的话经常会出现“Presentation Error”,而且PC2很多时候还判断不出来输出格式错误,就简单的判为"Wrong Answer",所以输出格式一定要注意。
1、一组输出接着一组输出,中间没有空行,这也是最简单的,请看题目SDUTOJ1010。
C语言代码:
#include < stdio.h > int main() // 把main函数定义成int类型 { int a,b; while (scanf( " %d %d " , & a, & b) != EOF) printf( " %d\n " ,a + b); return 0 ; }
每输出一组结果换行就可以了。
2、一组接着一组,每一组后面有一空行。请看SDUTOJ1016
C语言代码:
#include < stdio.h > int main() { int a, b; while (scanf( " %d%d " , & a, & b) != EOF) printf( " %d\n\n " , a + b); return 0 ; }
每输出一组结果后输出两个换行就可以了。
3、一组接着一组,每两组之间有一个空行,注意与前一种区分开,请看题目:SDUTOJ1017
#include < stdio.h > int main() { int n,m,sum,a; int i; scanf( " %d " , & n); for (i = 0 ; i < n;i ++ ) { scanf( " %d " , & m); sum = 0 ; while (m -- ){ scanf( " %d " , & a); sum += a; } printf( " %d\n " ,sum); if (i != n - 1 ) printf( " \n " ); } return 0 ; }