2012-11-22 52 views
1

正如標題所示,我想從文件中讀取每個字符,包括空格,並排除新行。閱讀字符,包括空格和文件C++中不包含換行符

文件外觀的一個例子。

 .  
##   . : 
    #___-  
## 
-------------- 
______________ 

我然後使用映射到每個字符轉換爲整數。

地圖std::map<char, int> map_converter;

std::ifstream map("level_1.map"); 

for(int t = 0; t < TOTAL_TILES; t++) { 
    int tileType = -1; 
    char load_type = ' '; 

    map >> load_type; 
    tileType = map_converter.find(load_type)->second; 
    tiles[t] = new Tile(x, y, tileType); 
} 

當我編譯它,我只能得到一個'分割故障(核心轉儲)

我該怎麼辦? `

+0

毫無疑問。 –

+2

'if(map_converter.find(load_type)== map_converter.end())'我們會遇到問題。在末端迭代器上調用'second'是無效的。 – andre

+0

嗯,我不明白你的意思。我對C++相當陌生。 我應該如何解決這個問題? –

回答

2

如果std::map::find未能找到它將返回的值std::map::end。與此相關的問題是分配tileType = std::map::end()->second無效。

std::ifstream map("level_1.map"); 

for(int t = 0; t < TOTAL_TILES; t++) { 
    int tileType = -1; 
    char load_type = ' '; 

    map >> std::noskipws >> load_type; 

    if (map_converter.find(load_type) == map_converter.end()) { 
     continue; 
    } 
    tileType = map_converter.find(load_type)->second; //this is now safe to do. 
    tiles[t] = new Tile(x, y, tileType); 
} 
+0

但是仍然存在一個問題,我怎樣才能避免空白? –

+0

@DanAndreasson爲您的流設置了[noskipws](http://www.cplusplus.com/reference/iostream/manipulators/noskipws/)('map >> std :: noskipws;') – andre

+0

嗯。當我使用noskipws時,我再次遇到分段錯誤錯誤。 –

相關問題