多组输入
在平时写题的过程中,常常会有多组输入的要求,所以这里将对我常使用的多组输入方法总结一下。
当已知要多组输入的数据组数时:
方法一:
#include <stdio.h>
int main()
{
int t,a;
scanf("%d\n",&t);//这里t为要输入数据的组数
while(t--)
{
scanf("%d",&a);
printf("%d ",a);
}
return 0;
}
未知要输入数据的组数:
方法二:
#include <stdio.h>
int main()
{
int a;
while(scanf("%d",&a)!=EOF)
{
printf("输出:%d\n",a);
}
return 0;
}
//输入ctrl+z,结束输入
方法三:
#include <stdio.h>
int main()
{
int a;
while(~scanf("%d",&a))
{
printf("输出:%d\n",a);
}
return 0;
}
//输入ctrl+z,结束输入
原理:
方法一:
开始所输入的 t 的值为要输入的组数,在进入 while 循环时会先对 t 的值进行判断,判断是否为真(非 0 ),显然开始输入的 t 的不会为 0 ,然后 t 再进行自减,直至 t = 0 时结束。如此即可实现对已知组数的多组输入。
方法二:
总所周知,C语言是不自带输入语言的,要想实现输入数据就会常用文件 stdio.h 里的 scanf 函数。而 scanf 函数在正常读入的时候返回成功读入的数据项数,但当读入时遇到了“文件结束”时则会返回 EOF 。
例如:
int a,b;
scanf("%d%d",&a,&b);
如果 a 和 b 都被成功读入,scanf 函数的返回值就为 2 ;
如果只有 a 或 b 中的一个被成功读入, scanf 函数的返回值为 1 ;
如果 a 和 b 都未被成功读入,返回值就为 0 ;
但是如果遇到 错误 或 文件结束,那么返回值为 EOF (end of file)。
所以,在测试时 scanf 函数读取的数据并且返回的值不是 EOF 即可进入循环,直到读取数据完毕,文件结束(EOF)。
但是在自己输入数据测试时,如果想要结束输入就要:
(1)windows平台,即dos命令窗口:
输入CTRL+Z即为文件结束。
(2)其它平台,如Unix, Linux,Mac等:
输入CTRL+D即为文件结束。
方法三:
‘~’ 为一元运算符,用于求整数的二进制反码,也就是对输入的数的二进制进行按位取反。
通过上面我们可以知道scanf 的返回值都为为大于等于 -1 的数,只有当 scanf 返回值为 -1(二进制表示为全为 1)时,~scanf() 的值为就为 0,其他情况均不为 0。
所以对于方法三,正常的输入都会进入循环,而当遇到文件结束时就会结束循环。
在自己输入数据测试时,结束输入的方法也与方法二一样。