簡體   English   中英

C ++:通過fstream讀取txt文件

[英]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 ,並且對結果求反,以便流對象本身表示“永不失敗”。 請注意, goodfail 並非相反,還請注意,失敗狀態是持久性的,並會導致隨后的輸入操作被忽略。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM