Re: [問題] 數字交換&印出低於平均值學生
我想大家都非常的厲害,但是對於新手,我個人是建議
少用函式庫,寫程式會比較有感覺,等比較厲害了,再來用一些好用的函式庫也不遲
先講問題1.
概論上沒錯,是要比較數字然後互換
我run一次程式的流程給你看,你應該就會知道自己錯在哪裡了
input data:8 6 5 7 9
stage 1:
i=0, j=0
if(arr[0]>arr[1]) //if(8>6)這行會互換
結果:6 8 5 7 9
stage 2:
i=0, j=1
if(8>5)
結果:6 5 8 7 9 //看出問題在哪裡了嗎?
你每次都只有兩兩比較,但是如果今天一種狀況
6 5 1 8 9 //input data
5 6 1 8 9 //stage 1 比較沒錯
5 1 6 8 9 //stage 2 這比較就錯了,因為第一跟第二個數字比較後
不代表第一個數字不會比後面的數字大還是小,所以你應該是固定一個數字
然後全部比較過,並兩兩互換,這樣保證第一個數字才會是最小或是最大的
----------------------------------------------------------------------
問題2:
養成良好習慣,每次手動輸入資料前,先加入一行fflush(stdin)
這意思是,清除標準輸入裝置的緩衝區,因為你無法確定緩衝區是不是有其他資料
如果沒資料還好,有資料一起進去你就掰了
然後我把你的code放進去跑是對的阿
你是不是輸入錯誤了??
建議先把score由標準輸入改掉,改成這樣
int score[5]={68,79,80,97,65}; //分數不會有小數點.....所以用整數存就夠了
這是為了避免手動輸入錯誤的問題,導致debug麻煩,當然如果寫到一個程度了
就可以像你的方法,直接用標準輸入裝置來輸入
----------------------------------------------------------------------
以上兩個問題,有問題歡迎再提出來討論
如果不懂的也可以問,單純交流也可以
我很喜歡寫程式,所以如果我會的,我就會說
但是如果不會就得請教版上其他高手了
----------------------------------------------------------------------
※ 引述《garnettooo (絕代風華賈奈特)》之銘言:
: 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: c++
: 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
: no
: 問題(Question):
: 1.輸入五個數字並將其由大排到小
: 2.列印出學生的平均成績標準差&低於平均的學生
: 餵入的資料(Input):
: 1.8 6 5 7 9
: 2.68 79 80 97 65
: 預期的正確結果(Expected Output):
: 1.5 6 7 8 9
: 2.學生1低於平均,學生5低於平均
: 錯誤結果(Wrong Output):
: 1.5 5 5 7 9
: 2.無法印出
: 程式碼(Code):(請善用置底文網頁, 記得排版)
: 1.http://codepad.org/Yio1mXUo
: 2.http://codepad.org/AlHeaucC
: 補充說明(Supplement):
: 小弟是程式新手,在練習時遇到這些問題,在程式運算結束後要印出結果時無法印出
: 正確結果,我知道這些問題可能很白痴,但我想了很久知道還是不太知道問題出
: 在程式的哪裡,希望各位大神能點出問題所在,感謝!
※ 引述《garnettooo (絕代風華賈奈特)》之銘言:
: 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: c++
: 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
: no
: 問題(Question):
: 1.輸入五個數字並將其由大排到小
: 2.列印出學生的平均成績標準差&低於平均的學生
: 餵入的資料(Input):
: 1.8 6 5 7 9
: 2.68 79 80 97 65
: 預期的正確結果(Expected Output):
: 1.5 6 7 8 9
: 2.學生1低於平均,學生5低於平均
: 錯誤結果(Wrong Output):
: 1.5 5 5 7 9
: 2.無法印出
: 程式碼(Code):(請善用置底文網頁, 記得排版)
: 1.http://codepad.org/Yio1mXUo
: 2.http://codepad.org/AlHeaucC
: 補充說明(Supplement):
: 小弟是程式新手,在練習時遇到這些問題,在程式運算結束後要印出結果時無法印出
: 正確結果,我知道這些問題可能很白痴,但我想了很久知道還是不太知道問題出
: 在程式的哪裡,希望各位大神能點出問題所在,感謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.250.187.94
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1473442203.A.99D.html
※ 編輯: jacky1989 (111.250.187.94), 09/10/2016 01:55:20
※ 編輯: jacky1989 (111.250.187.94), 09/10/2016 01:55:53
推
09/10 01:59, , 1F
09/10 01:59, 1F
→
09/10 01:59, , 2F
09/10 01:59, 2F
→
09/10 02:00, , 3F
09/10 02:00, 3F
咦?是喔....我一直以來都使用fflush在清除,是否能請教大神
用getchar要怎麼清除緩衝區呢?
※ 編輯: jacky1989 (111.250.187.94), 09/10/2016 02:03:17
→
09/10 02:01, , 4F
09/10 02:01, 4F
→
09/10 02:02, , 5F
09/10 02:02, 5F
→
09/10 02:03, , 6F
09/10 02:03, 6F
→
09/10 02:03, , 7F
09/10 02:03, 7F
果然是大神.....小弟獻醜了.....><
※ 編輯: jacky1989 (111.250.187.94), 09/10/2016 02:04:53
→
09/10 02:06, , 8F
09/10 02:06, 8F
→
09/10 02:07, , 9F
09/10 02:07, 9F
→
09/10 02:08, , 10F
09/10 02:08, 10F
→
09/10 02:09, , 11F
09/10 02:09, 11F
所以是這樣寫嗎?
char t;
while(1){
t=getchar();
if(t=='\n')
break;
}
※ 編輯: jacky1989 (111.250.187.94), 09/10/2016 02:11:31
推
09/10 02:12, , 12F
09/10 02:12, 12F
謝大神指點,(已筆記
※ 編輯: jacky1989 (111.250.187.94), 09/10/2016 02:13:55
推
09/10 13:41, , 13F
09/10 13:41, 13F
推
09/13 13:53, , 14F
09/13 13:53, 14F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):