C语言多组输入

在刷题进步的过程中遇到了一些多组输入的问题,这里简单总结下

方法一:用for循环实现

	int a = 0, i = 0;
	scanf("%d", &a);
	
	for (i = 0; i < a; i++) {
		int b = 0;
		scanf("%d", &b);
	}

这里就可以实现输入a组整数数据,a是自己定的,算作已知输入组数的情况

 

方法二:用while循环实现

	int a = 0, i = 0;
	scanf("%d", &a);
	
	while (a--) {
		int b = 0;
		scanf("%d", &b);
	}

这是利用了while函数循环的原理,即进入循环前先判断表达式的值,如果非0,进入循环;等于0,退出循环。

值得一提的是这里用到了后置操作符--。while(a--)会先根据a的值判断是否进入循环,再执行a--操作,所以这里循环a次,输入a组数据;若我们写成while(--a)便会先执行a--操作,再根据a--的值判断是否进入循环,这样就只会循环a-1次,输入a-1组数据。

方法三:EOF法

	int a = 0;
	while (scanf("%d", &a) != EOF) 
	{

	}

这是我自己做题中经常使用的方法,首先我们要知道用scanf()函数进行输入后,scanf()是有返回值的,这个返回值根据我们输入的数据个数来决定,输入n个有效数据,返回值就是n;未输入有效数据返回值为0

而EOF(end of file)是文件结束的标志,值为-1;

正常输入的情况下scanf()函数的返回值 != -1,判断条件为真,进入循环,这样就可以一直输入下去了

当然,等我们输入完毕后,按下Ctrl+Z即可结束循环

方法四:EOF法其它形式

	int a = 0;
	while (~scanf("%d", &a)) 
	{

	}

~是C语言中的单目操作符,作用是对二进制按位取反

刚刚我们说到,scanf()函数读取数据后会有返回值,这里即对scanf的返回值的二进制按位取反,再判断这个值为0还是非零。

什么情况下这个值等于0呢?答案就是当scanf()函数返回值为-1(EOF的值为-1)的时候

这里我解释一下,负数在计算机中是按其补码的形式来存储的。

推算一下可知-1的二进制存储下所有二进制位都是1,按位取反得0,循环结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值