[英]C++: Reading txt file through fstream
我有一個.txt文件,看起來像這樣:
Toy ball
1.25
DVD
20.00
Row Boat
1.00
第一行是商品,第二行是價格,並在接下來的兩個商品中重復,以此類推。 所以我的問題是我怎樣才能將第一行放入字符串,然后將第二行放入浮點值? 這是我擁有的代碼,我正在使用結構。
const int TOTAL_ITEMS = 3;
for (int itemNumber = 0; itemNumber < TOTAL_ITEMS; itemNumber++) {
string line;
getline(inFile,line);
list[itemNumber].item = line;
float cost;
inFile >> cost;
list[itemNumber].price = cost;
}
然后,我打印列表:
for (int itemNumber = 0; itemNumber < TOTAL_ITEMS; itemNumber++) {
cout << itemNumber << ": " << list[itemNumber].item << " " << list[itemNumber].price << endl;
現在,這並沒有打印我想要的內容,而struct數組只接受了第一行和第一個價格並將其打印出來,但是其他的都說“ 0”。 任何幫助都是極好的。 多謝你們
消耗輸入時,需要檢查流狀態。 您可以通過檢查getline()和operator >>的返回值來做到這一點:
if (!getline(inFile,line))
; // oops, error, do something
if (!(inFile >> cost))
; likewise
完成此操作后,您會發現輸入失敗,因為您在讀取內容時略有不正確,但是一旦發現錯誤,就不難修復。
float
輸入(順便說一句,只需使用double
,麻煩就更少了)在輸入緩沖區中留下換行符,隨后的行輸入會消耗掉換行符。
而是對這兩行都使用getline
。
然后使用例如istringstream
將第二行轉換為... double
,只需通過從inFile
讀取的相同方式從其中“讀取” inFile
。
除了直接的錯誤修復,您還需要檢查inFile
的流狀態,例如,通過調用它的fail
成員函數。 當您直接將流對象用作條件時,對您而言,將其轉換為bool
調用將fail
,並且對結果求反,以便流對象本身表示“永不失敗”。 請注意, good
與fail
並非相反,還請注意,失敗狀態是持久性的,並會導致隨后的輸入操作被忽略。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.