#includeint main() { int a,b; while(~scanf("%d%d", &a, &b))printf("%dn",a+b); return 0; }
scanf的返回值有0 1 2,3,4,5等到正整数 表示 对应的%d有几个 并且能正常取值的个数
windows系统按下ctrol z表示退出输入流 这时返回值是-1
在计算机系统中保存的数据是以二进制数据的补码表示 也叫二补码
正数的补码就是原码 例如1 scanf函数应该是int scanf() 也就是scanf的返回值是4个字节32位bit
1对应 00000000000…(30ge0)1 第一个0表示正负符号0是正 1是负
负数的补码就是原码取反再加1
-1 对应0000000…1取反11111111111…0 再加1就是变成11111111…11
所以while(~scanf("%d%d", &a, &b) 只有在运行文件上同时按下ctrol 和z时退出输入流 ~scanf("%d%d", &a, &b)这个值就是0其他情况都是有值的即时是0 二进制数据00000000…0,它的反码1111111111111…11还是为真
最大情况也是01111111111…1它的反码也是1000000虽然是负数 但是业为真
~这个符号表示数据取反
总结;while(~scanf("%d%d", &a, &b))这段代码就是为了在你取消当前输入的情况下退出当前输入流



