看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《eric123415 (鋼絲螺絲)》之銘言: : 開發平台(Platform): VC++ : 問題(Question): 讀檔部分卡關 只設計了結構體的部分 : 不知道這種資料要怎讀入結構體 : 餵入的資料(Input): : txt檔內容 : 第1個數字代表"10個人" 第二個數字代表每個人有"5科"成績 : 接下來一連串數字為成績(等於要每個人 要有五科成績) : 10 5 53 66 16 77 81 73 9 57 66 98 61 84 68 35 67 86 77 72 8 : 51 35 98 4 45 5 60 77 5 52 89 67 40 32 42 47 82 11 57 52 : 70 5 3 27 72 37 14 38 55 95 50 : 預期的正確結果(Expected Output): : 能計算每個同學的五科總分+成績 以及全班總分+平均... : 錯誤結果(Wrong Output): : 程式碼(Code):(請善用置底文網頁, 記得排版) : http://ideone.com/KREKY4 : 補充說明(Supplement): : 不好意思 小弟c++菜鳥...對讀檔方面有點頭痛.... : 懇請大家幫忙了... 用getline讀資料看是要用空白鍵/tab/換行都可以做 google 可以搜尋這個api怎麼使用 寫法自己可以再做調整 ---- void main() { int studuent = 0; int subject = 0; float* scoreArray; String data; ifstream file ("data.txt"); if (file.is_open()) { if (getData(file, data)) { student = atoi(data.c_str()); } else { return; } if (getData(file, data)) { subject = atoi(data.c_str()); } else { return; } int scoreCount = student * subject; scoreArray = new float(scoreCount); int count = 0; while (getData(file, data) && scoreCount > count) { *(scoreArray + count) = atof(data.c_str()); ++count; } ... delete [] scoreArray; } } bool getData(ifstream& file, string& data) { if (file.good()) { getline(file, data, ' '); //以空白鍵區分資料段 return true; } return false; } -- ※ 發信站: 批踢踢實業坊(ptt.cc)
TsinTa:原po人真好,不過為啥要用字串讀進來,再用atoi來轉@@... 06/23 19:24
TsinTa:是因為這樣比用數字一個一個讀還快嗎? 06/23 19:26
FAITHY:因為有現成的API可以區分判斷條件讀檔 06/23 19:27
FAITHY:自己寫還要重寫判斷做法 也是要字元轉成數字 06/23 19:29
※ 編輯: FAITHY 來自: 114.25.194.56 (06/23 19:31)
TsinTa:直接file >> *(scoreArray + count)不行嗎? 06/23 19:35
FAITHY:恩恩 OK operator >> 應該都做掉了 06/23 19:40
FAITHY:這樣不用getline法寫也是可以做到... 看起來還更乾脆 06/23 19:41
TsinTa:如果我沒記錯scoreArray應該可以寫成陣列scoreArray[count] 06/23 19:45
FAITHY:恩恩 也可以~ 06/23 22:09
johnhmj:( ̄y▽ ̄)╭ 好人(蓋章 06/23 23:04
eric123415:感謝您 和課堂上得有點不一樣 來研究一下... 06/24 00:42
DarkPrincex:怎麼感覺是一個完全C++的寫法...突然間完全看不懂了.. 06/24 11:27
tjjh89017:c++允許void main()? 06/24 15:19
azureblaze:c++不允許但是MSVC允許void main()XD 06/24 15:33