作者FAITHY ()
看板C_and_CPP
標題Re: [問題] 作業卡關 懇請協助了(讀檔 & 結構部分)
時間Sun Jun 23 19:16:18 2013
※ 引述《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