多组输入
多组输入的意思就是读取数量不定的输入数据(不能确定输入数据的数量),在这种情况下,需要不断读取数据直至没有新的输入为止。
多组输入的场景在编写程序中非常常见,其中C语言中最常用的有两种:
while(scanf("%d", &a) != EOF)
while(scanf("%d", &a) == 1)
首先需要了解scanf()函数,scanf()函数的定义如下:
int scanf ( const char * format, ... );
可以看出,scanf()函数返回值为int类型,如果scanf读取成功,则返回的值是scanf真正读取到的值的个数,如果读取失败则返回eof,eof在c语言中表示文件结束符(endoffile),其值为-1,例如:
ret = scanf("%d",&a);
此时如果读取成功,则ret的值为1,同理ret = scanf("%d %d",&a,&b);读取成功时ret的值为2。
了解完scanf()函数之后,再来看这两种写法:
1. while(scanf("%d", &a) != EOF)
2. while(scanf("%d", &a) == 1)
- 第一种,当scanf正常读取时,其返回值为1不等于eof,判断为真因此会继续执行while循环。
- 在理解了第一种的写法之后,第二种写法便非常好理解,当scanf正常读取时,其返回值为1,判断为真,因此继续执行while循环。