`while(~scanf("%d%d",&a,&b))` 是在处理输入数据的一种特殊写法。
解释
1. `scanf("%d%d", &a, &b)`:
- 这个函数用于从标准输入中读取两个整数,并将它们分别存储到变量 `a` 和 `b` 中。
2. `~` 操作符:
- `~` 是按位取反运算符。在这里,它用于将 `scanf` 的返回值取反。
- `scanf` 返回成功读取的项数。对于 `scanf("%d%d", &a, &b)` 这种格式,如果成功读取两个整数,它会返回 `2`。如果遇到输入结束或错误,它会返回 `EOF`(通常是 `-1`)。
3. `~` 的效果:
- `~2` 的结果是 `-3`(按位取反),这是一个非零值,条件判断会认为这个值是 `true`。
- `~(-1)` 的结果是 `0`,这意味着 `scanf` 遇到输入结束或错误时,`while` 循环会终止。
总结
这一句的意思是“只要 `scanf` 成功读取了两个整数,循环就继续执行。”如果 `scanf` 不能再读取到两个整数(例如到达输入结束或遇到错误),`while` 循环就会退出。这是一种处理多组输入的常见方式,尤其是当不事先知道输入的数量时。