題目很簡單但是有一個挺好的知識點
問題 1000: [競賽入門]簡單的a+b
時間限制: 1Sec 記憶體限制: 128MB 送出: 43301 解決: 20493
題目描述
輸入兩個整數a和b,計算a+b的和
注意此題是多組測試資料
輸入
輸入兩個整數A和B
範圍不超過2^10
輸出
求A+B
樣例輸入
1 1
10 20
樣例輸出
2
30
提示
訓練場入門:藍橋杯ACM基本輸入輸出教程
題目是非常簡單的,但是有一個比較頭痛的事情就是輸入的内容是不确定的。對于不确定的輸入内容如何通過輸入函數解決呢
首先通過學習發現對于這些輸入内容不确定的題目主要根據scanf函數的傳回值來确定的。
經過分析,發現scanf函數傳回值和輸入的内容有關,如scanf("%d%d",&a,&b)輸入數值後傳回的數值是2,由此延伸出一個出來方法一
# include<stdio.h>
int main(){
int a=0 , b =0 ;
while(scanf("%d%d",&a,&b)==2)//當判斷輸入的内容是兩個整數的時候進行運算
{
printf("%d\n",a+b);
}
return 0 ;
}
與此同時偷師了一波,偷師内容:
scanf()函數傳回值分為3種:
(1)傳回正整數。表示正确輸入參數的個數。
(2)傳回整數0。表示使用者的輸入不比對,無法正确輸入任何值。
(3)傳回-1。表示輸入流已經結束。在Windows下,使用者按下CTRL+Z(會看到一個^Z字元)再按下回車(可能需要重複多次),就表示輸入結束;Linux/Unix下使用CTRL+D表示輸入結束。
(重點,重點,重點!!!!!!!!!!作筆記了!!!!)
關于~的作用解析:
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循環。
什麼意思呢其實就是如果不清楚 接收多少内容的情況下,通過使用“while(~scanf(""))”可以完成不确定内容的輸入,如果不知道需要接收多少行資訊的時候,可以參考這個方式。樣例
# include<stdio.h>
int main(){
char a[1000] , b =0 ;
while(~scanf("%s",&a)){//輸入字元串,判斷是否由輸入的内容有的話執行判斷,如果輸入内容結束(ctrl+z停止輸入流,不是回車)将結束循環
cout<<a<<endl;//循環中的a會被覆寫需要保持的話需要單獨處理
}
return 0 ;
}
還研究了一下c++的使用方法
# include <iostream>
using namespace std ;
int main(){
char a[1000] , b =0 ;
while(cin>>a){//當輸入流結束的時候結束循環
cout<<a<<endl;
}
return 0 ;
}