-
while(scanf("%d,&n)&&n!=0)
while(scanf("%d",&n&&n)
while(scanf("%d",&n),n)
功能:當輸入n且n!=0時繼續循環,當n為0時結束循環(上述三種寫法都可實現此種功能)
-
while(scanf("%d,&n)!=EOF)和while(~scanf("%d",&n)
功能:當讀到文件結尾時終止循環
- while (~scanf("%d%d",&n,&m))等效於 while (scanf("%d%d",&n,&m)!=EOF)
因為讀到文件的結束符時,scanf返回值是EOF,也就是-1,而~(-1)的作用就是對-1的按位取反。
在計算機中,數字按補碼存儲,正數的補碼和原碼一樣,負數的補碼是其反碼+1,反碼也就是符號位仍為1,其它是原碼取反。
以 8 位二進制數來討論,-1的原碼是1000 0001,因此-1的補碼就是1111 1111。~(-1)就是包括符號位都取反,變成0000 0000。
於是while(~scanf(...))就和while(scanf(...)!=EOF)等價了。