2012-11-15 24 views
0

有一些問題,我記住了,並會嘗試問這裏..C++關於ifstream.ignore()

下面是一個運算符重載

ifstream& operator>>(ifstream &input, Map2D &map2d) 
{ 
    int x1,x2,y1,y2; 

    //get x1 first 
    input.ignore(2); 
    input>>x1; 

    //get y1 
    input.ignore(); 
    input>>y1; 

    //get x2 
    input.ignore(4); 
    input>>x2; 

    //get y2 
    input.ignore(); 
    input>>y2; 
    input.ignore(); 
} 

這是我的文本文件

Map2D, [5, 7], [3, 8] 

我記住的問題是,x2因爲我的分隔符是逗號,爲什麼x2是忽略(4)而不忽略(2),我嘗試忽略(2),並且數字搞砸了。但是忽略(4)是正確的1

爲什麼是(4)即使世界只有白色空間和[

x2 refer to value 3 

謝謝!用於說明

+0

我仍然看到它。祈禱告訴你,爲什麼你使用硬編碼的數字,而不是使用'input.ignore(LARGE_NUM,']')'或其他方法來讀取下一個分隔符?你的操作員>>對於任何兩位數的數字都會失敗...... – DevSolar

+0

@DevSolar,我如何使它靈活處理2位數? – user1578897

+1

我覺得你的問題不是關於*編程*,而是關於*設計*,關於將問題分解成邏輯部分。這不能在500個字符的評論框中教授,對不起。基本思想是獲得一個值對 - '''''''',然後解析*那*。一旦完成,獲取* other *值對,並解析*該*。 (在這一點上,你的大腦的某些部分應該自動地跳起來,然後哭泣:「噢!我可以重複使用代碼來讀取值對!」) – DevSolar

回答

0

您正在跳過「],[」這是四個不同的字符。

當您閱讀y1時,您仍然位於流中y1的位置。此位置在右括號「]」的末尾之前,然後您必須讀取逗號,空格和下一個括號「[」。

+0

但是當我用分隔符逗號分開時,我應該開始從空白處[ – user1578897

+0

那你還沒有達到那個分隔符呢。你仍然在支架後面。我可能完全錯誤,但這意味着流不會跳過那個角色。 DevSolar是正確的,但你應該以他列出的方式使用忽略。 –