今天做了幾個杭電的acm題,包括2000題,題目描述是:輸入三個字元後,按各字元的ascii碼從小到大的順序輸出這三個字元。要求輸入為:輸入資料有多組,每組佔一行,有三個字元組成,之間無空格。輸出為:對於每組輸入資料,輸出一行,字元中間用乙個空格分開。編寫的通過的**如下:
#include int main()
if(c <= a)
else if(c > a && c < b)
printf("%c %c %c\n", a, b, c);
}return 0;
}
第一次沒有加getchar()函式,結果不正確,執行時,第一次輸入三個字元排序正確,可是後面再輸入時輸出就會錯誤。通過檢視別人類似問題的分析,知道了其中緣由。從鍵盤輸入的字元,會存放到緩衝區中,包括回車符。如輸入「abc回車」之後,緩衝區中存了有四個字元'a'、'b'、'c'、'\n',如果上面程式中沒有getchar(),則第一次從緩衝區中提取了三個字元之後,還剩下了乙個'\n',則下次再輸入三個字元時,緩衝區中會把上次剩下的回車符也算進去,這樣處理起來就會有問題。getchar()是從緩衝區中讀取乙個字元,如果只是去除緩衝區中的字元,不需要用賦值表示式,直接使用getchar();即可,當然,使用賦值表示式也可以,如:m=getchar();。上面程式中使用了getchar()之後,就可以把每次輸入三個字元之後的回車符吸收掉,這樣結果就正確了。
杭電ACM 與進製有關的oj題
hdu 1720 題目意思是輸入兩個16進製制的數,求它們之和的10進製數。如果大家還記得 x x 代表 16進製制的話,這個題目就很簡單了。如下 includeusing namespace std int main return 0 hdu 1877 題目意思 輸入格式 測試輸入包含若干測試用例...
杭電acm的第1000題c語言解法
首先我選擇的是c語言的解法,開始是輸入如下的答案 include stdio.h int main void long long a,b scanf d a scanf d b printf d n a b 該程式只能輸入一次資料,而杭電acm1000題問題描述是 each line will co...
杭電ACM 2001 計算兩點間的距離
problem description 輸入兩點座標 x1,y1 x2,y2 計算並輸出兩點間的距離 input 輸入資料有多組,每組佔一行,由4個實數組成,分別表示x1,y1,x2,y2,資料之間用空格隔開 output 對於每組輸入資料,輸出一行,結果保留兩位小數。sample input 0 ...