2.10黑盒测试-常见输入输出方式

单点测试:一组通过就有分数,最后看分数之和。
多点测试:全部数据通过才算通过。
1.常用的输入方式:

(1) while...EOF型
如果题目没有给定输入的结束条件,那么就默认读取到文件末尾。

对黑盒测试来说,所有输入数据都是放在一个文件里的,
系统会让程序去读取这个文件里的输入数据,然后执行

程序并输出结果。那么如果题目没有指定何时结束输入,一般都是指输入完所有数据(即到
达文件末尾)为止。


scanf函数的返回值为其成功读入的参数的个数。

什么时候会读入失败?读入失败时scanf函数是否返回0?
正常的控制台(屏幕黑框框)中的输入1般是不会失败的,只有在读
取文件时到达文件末尾导致的无法读取现象,才会产生读入失败。这个时候,scanf函数会返
回-1而不是0,且C语言中使用EOF (即End OfFile) 来代表1while (scanf("%d",&n)!= EOF) {
}
含义是:只要scanf的返回值不为EOF (即文件中的数据没有读完),就反复
读入n,执行while函数体的内容;当读入失败(到达文件末尾)时,结束while循环。
可以按<Ctrl+ Z>组合键,这时就会显示一一个^Z,按<Enter>键就可以结束while了。

还需要指出,如果读入字符串,则有sanf"%s", str)gets(str)两种方式可用,其对应的
输入写法如下所示: .
while (scanf ("&s", str) != EOF) {
}
while (gets(str) != NULL) {
}

(2)while... break型
题目要求当输入的数据满足某个条件时停止输入。
#include <stdio.h>
	int main (){
	int a, b;
	while (scanf ("8d8d"&a, &b)!= EOF) {
		if(a==0 && b==0) break;
		printf ("号d\n",a + b);
	}
	return 0;
}

简洁写法:
#include <stdio.h>
int main (){
	int a, b;
	while (scanf ("8d号d",&a,&b),a||b) {//a!=0时循环
	printf ("%a\n", a+b) ;
	}
	return 0;
}
(3) while(T--)型
在这种类型中,题目会给出测试数据的组数,然后才给出相应数量组数的输入数据。
int T;
scanf ("%d"&T) ;
while (T--){
}
2.常见的输出方式
(1)正常输出
这种输出类型要求需要每两组输出数据中间没有额外的空行,即输出数据是连续的多行。
(2)每组数据输出之后都额外加一个空行
这个要求非常容易实现,只需要在每组输出结束之后额外输出一个换行符\n即可。
(3)两组输出数据之间有一个空行,最后一组数据后面没有空行
这一般是在第三种输入类型whil(T)的情况下,只需要通过判断T是否已经减小到0:
判断是否应当输出额外的换行。

	int T, n, a;
	scanf ("%d", &T) ;
	while(T--) {
	int sum =0;
	scanf ("%d"&n) ;
	for(int i=0;i<n;i++){
		scanf ("%d", &a) ;
		sum=sum+a;
	}
	printf ("&d\n", sum) ;
	if(T>0) printf("\n") ;
(4)类似的要求是:输出一行N个整数,每两个整数之间用空格隔开,最后一个
整数后面没有不允许加上空格。
for(int i = 0; i<N; i++) {
	printf ("%d", a[i]) ;
	if(i< N-1) printf ("") ;
	else printf ("\n");
}
最后需要指出,在多点测试中,每一次循环都要重置一下变量和数组, 
否则在下一组数据来临的时候变量和数组的状态就不是初始状态了。
例如上面codeup 1007的代码中,sum =0的语句就必须放在while之内,
如果放在while之外,则第二组数据来临时sum就不是0了。
而重置数组一般使用memset函数或fill函数。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值