while(~scanf(..))的用法


  1. while(scanf("%d,&n)&&n!=0)

    while(scanf("%d",&n&&n)

    while(scanf("%d",&n),n)

    功能:當輸入n且n!=0時繼續循環,當n為0時結束循環(上述三種寫法都可實現此種功能)

  2. while(scanf("%d,&n)!=EOF)和while(~scanf("%d",&n)

    功能:當讀到文件結尾時終止循環

  3. while (~scanf("%d%d",&n,&m))等效於 while (scanf("%d%d",&n,&m)!=EOF)

    while(~scanf(..))為什么可以這樣寫

    因為讀到文件的結束符時,scanf返回值是EOF,也就是-1,而~(-1)的作用就是對-1的按位取反。

    在計算機中,數字按補碼存儲,正數的補碼和原碼一樣,負數的補碼是其反碼+1,反碼也就是符號位仍為1,其它是原碼取反。

    以 8 位二進制數來討論,-1的原碼是1000 0001,因此-1的補碼就是1111 1111。~(-1)就是包括符號位都取反,變成0000 0000。

    於是while(~scanf(...))就和while(scanf(...)!=EOF)等價了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM