【C語言】~跳出死循環Ctrl+Z


題目:

題目 1000: [競賽入門]簡單的a+b

題目描述

輸入兩個整數a和b,計算a+b的和

注意此題是多組測試數據

輸入

輸入兩個整數A和B

范圍不超過2^10

輸出

求A+B

樣例輸入
1 1
10 20
樣例輸出
2
30

這道題目的重點是scanf函數。

函數名: scanf 
功 能: 執行格式化輸入 
用 法: int scanf(char *format[,argument,...]);

scanf()函數是通用終端格式化輸入函數,它從標准輸入設備(鍵盤) 讀取輸入的信息。可以讀入任何固有類型的數據並自動把數值變換成適當的機內格式。

其調用格式為:      scanf("<格式化字符串>",<地址表>);

【注意】scanf函數的返回值是重點,必須理解。

scanf()函數返回值分為3種:

(1)返回正整數。表示正確輸入參數的個數。

(2)返回整數0。表示用戶的輸入不匹配,無法正確輸入任何值。

(3)返回-1。表示輸入流已經結束。在Windows下,用戶按下CTRL+Z(會看到一個^Z字符)再按下回車(可能需要重復多次),就表示輸入結束;Linux/Unix下使用CTRL+D表示輸入結束。

printf函數介紹就忽略了,不是本題目的重點。
參考代碼:

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int a=0,b=0;
 5     while(~scanf("%d%d", &a, &b))   //下面有關於~的解析
 6     {
 7         printf("%d\n",a+b);
 8     }    
 9     return 0;
10 }

上述程序正常輸入時,沒有任何問題,比如:

輸入 1 2  打印3

輸入10 20 打印30

 

有很多讀者對 ~ 不能理解,我就重點介紹一下吧。

(重點,重點,重點!!!!!!!!!!作筆記了!!!!)

關於~的作用解析:

1、在Windows下,用戶按下CTRL+Z(會看到一個^Z字符),會停止輸入流,scanf會返回-1。

2、-1的補碼為11111111 11111111 11111111 11111111  一共4個字節。

3、~是C語言中的按位取反,因此~(-1)結果為00000000 00000000 00000000 00000000剛好為整數0的補碼。

4、因此當輸入Ctrl+Z時,scanf會返回-1,while(~-1)==while(0),0為假,退出while循環。

 


免責聲明!

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



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