[問題] 關於C++的檔案處理
開發平台(Platform): VC++
額外使用到的函數庫:
問題(Question):
關於ifstream 的eof()與getline()兩個函式有一些問題
這兩個函式都是照手上的書的寫法來寫的
但是卻發生了很奇怪的錯誤
餵入的資料(Input):
Inventory of "a" restaurant.
Inventory:
c 5 20
a 10 100
b 20 20
預期的正確結果(Expected Output):
dq_inventory[0]{m_itemName="c",m_itemPrice=5,m_itemAmount=20}
dq_inventory[1]{m_itemName="a",m_itemPrice=10,m_itemAmount=100}
dq_inventory[2]{m_itemName="b",m_itemPrice=20,m_itemAmount=20}
錯誤結果(Wrong Output):
dq_inventory[0]{m_itemName="c",m_itemPrice=5,m_itemAmount=20}
dq_inventory[1]{m_itemName="a",m_itemPrice=10,m_itemAmount=100}
dq_inventory[2]{m_itemName="b",m_itemPrice=20,m_itemAmount=20}
dq_inventory[3]{m_itemName="b",m_itemPrice=20,m_itemAmount=20}
(也就是說本來應該讀到結尾也就是"b"那行結束之後跳出迴圈
可是他卻又多跑了一次迴圈)
另外junk也讀到了一堆亂七八糟的東西
點開看只有第一個是'\0'
其他都是'?'
程式碼(Code):(請善用置底文網頁, 記得排版)
Cinventory inventory; //Cinventory class物件宣告
deque<Cinventory> dq_inventory; //double-ended queue宣告
string itemName;
int itemPrice,itemNumber;
char junk[1000];
ifstream fileInput("inventory.txt",ios::in);
getline(junk,1000,'\n'); //將開頭兩行讀掉,為了不跟需要的資料搞混
getline(junk,1000,'\n'); //手上的書告訴我可以讀取999個字元到junk
//,或者是讀到\n就結束
while(!fileInput.eof()) //判別是否讀到檔案的尾端
{
fileInput >> itemName;
fileInput >> itemPrice;
fileInput >> itemNumber;
inventory.setInventory(itemName //之前忘記打上來
,itemPricee,itemNumber); //現在補上
dq_inventory.push_back(inventory);
}
補充說明(Supplement):
整段程式碼因為滿大的就不先PO上來
如果需要全部的話我再想辦法用上來
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.110.45.103
※ 編輯: jack710619 來自: 123.110.45.103 (11/19 03:46)
推
11/19 05:43, , 1F
11/19 05:43, 1F
推
11/19 08:53, , 2F
11/19 08:53, 2F
我寫成do-while迴圈也是一樣
換成while(fileInput)做判斷也是一樣會多輸入一次最後一行
推
11/19 08:58, , 3F
11/19 08:58, 3F
→
11/19 08:59, , 4F
11/19 08:59, 4F
→
11/19 09:04, , 5F
11/19 09:04, 5F
→
11/19 09:04, , 6F
11/19 09:04, 6F
所以意思就是說用 .eof()來寫一定會多跑一次囉?
那如果我不想要多跑那一次有什麼方法嗎?
噢還有我改成do{...}while(fileInput);來寫也是會多讀一次
※ 編輯: jack710619 來自: 123.110.45.103 (11/19 13:27)
※ 編輯: jack710619 來自: 123.110.45.103 (11/19 13:29)
推
11/19 13:32, , 7F
11/19 13:32, 7F
那這樣用了while的內容要再打一次嗎?
因為我是第一次看見這樣的寫法
※ 編輯: jack710619 來自: 140.120.13.43 (11/19 14:06)
推
11/19 15:57, , 8F
11/19 15:57, 8F
→
11/19 15:58, , 9F
11/19 15:58, 9F
→
11/19 15:58, , 10F
11/19 15:58, 10F
→
11/19 15:58, , 11F
11/19 15:58, 11F
→
11/19 15:59, , 12F
11/19 15:59, 12F
推
11/19 17:06, , 13F
11/19 17:06, 13F
→
11/19 17:08, , 14F
11/19 17:08, 14F
→
11/19 19:54, , 15F
11/19 19:54, 15F
→
11/19 20:30, , 16F
11/19 20:30, 16F
→
11/19 20:31, , 17F
11/19 20:31, 17F
推
11/20 12:11, , 18F
11/20 12:11, 18F
→
11/20 12:13, , 19F
11/20 12:13, 19F
這個部份是我忘記打上來了 SOR
我自己寫的code裡面是有寫的
※ 編輯: jack710619 來自: 123.110.45.103 (11/20 12:59)
※ 編輯: jack710619 來自: 123.110.45.103 (11/20 13:03)
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章
11
17