在多组输入的情况下:程序会持续地接收多个输入,并针对每个输入进行相应的处理,直到满足某个特定的条件才停止。
首先我们先介绍一下输入函数scanf.
scanf读取成功后,该函数返回成功填充的参数列表的项数。
如果发生读取错误或在读取时到达文件末尾,则会设置正确的指示器(feof 或 ferror)。并且,如果在成功读取任何数据之前发生任一情况,则返回 EOF(-1)。
例如,
int a = 0;
int b = 0;
scanf("%d%d", &a, &b);
读取成功,scanf就返回2,读取失败就返回EOF(-1).
下面介绍多组输入的方法,主要是利用scanf的返回值:
1.
while (scanf("%d%d", &a, &b) == 2)
{
}
1)如果成功读取a和b的值返回2,2==2,条件为真,继续读取。
2)读取失败时返回EOF,EOF == 2,条件为假,读取结束
2.
while (scanf("%d", &a) != EOF)
{
}
1)读取成功返回1,1 != EOF,条件为真,继续读取
2)读取失败时返回EOF,EOF != EOF,条件为假,读取结束
3.
while (~scanf("%d", &a))
{
}
1)读取成功返回1,~1,条件为真,继续读取
1的二进制序列为 00000000000000000000000000000001,
~1的二进制序列为 11111111111111111111111111111110,结果是非零,条件为真,继续读取
2)读取失败时返回EOF, EOF(-1)的二进制序列为 11111111111111111111111111111111
~(-1)的二进制序列为 00000000000000000000000000000000,结果是零,条件为假,读取结束.
在这里用到了按位取反~操作符,需要注意的时,按位取反会将数据的补码所有位都进行取反,包括符号位。
如果你觉得这篇博客对你有帮助的话 ,希望你能够给我点个赞,鼓励一下我。感谢感谢……