題目:
題目 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循環。