【读入多组数据】
请问这两者有区别吗,为什么前者也可以读入多组数据??1)
while(~scanf("%d%d",&a,&b))
...
2)
while(scanf("%d%d",&a,&b) != EOF)
... 本帖最后由 xiaoxiaoshaonia 于 2018-2-20 10:05 编辑
while( ~scanf("%d %d", &a, &b) )
应当写成
while( scanf("%d %d", &a, &b) == 2 )
在ACM比赛时,选手知道不会出现非法或残缺的数据,所以为了节约时间,写成第一种格式
scanf 返回正确读入的字段数目,假如发生错误,返回 EOF
以 scanf("%d %d", &a, &b) 为例,它可能返回 EOF、0、1、2
如果发生了错误(比如无内容可读),返回EOF;
如果第一个%d格式就不对,返回0
如果第二个%d格式不对,返回1
如果第二个%d格式也对了,返回2
while( scanf("%d %d", &a, &b) == 2 ) 就是 a和b 都读成功了
GCC的EOF规定为-1,而-1在内存里以补码形式存放,为11111...111全为1,而~位取反则把它变成了000..0000全为0,也就是正数0。
因此-1位取反为0,用作逻辑判断,不过确实不太好用,(scanf .. == 2)更好。以下代码说明:
程序代码:
printf("EOF = %d , %d\n",EOF,~EOF);
页:
[1]