2015-01-26 86 views
0

我正在逐行讀取文本文件,其內容用逗號分隔,並通過將getline()解壓縮到我的stringColor,stringName,stringReward變量中進行解析,傳入我的stringstream ss,然後傳遞給我的tileArray指針數組到相應的int,string和int變量中。將字符串解析爲字符串指針數組時出現分段錯誤錯誤

我的程序編譯,但是當我運行它時,它會生成一個分段錯誤11,看起來似乎是我將行內容傳遞到stringstream的地方。我找不到問題出在哪裏......

也許如果有人能指出錯誤的地方,我會非常感激。

這是我試圖從文本文件中讀入的每一行的格式。 它應該能夠讀取任意數量的行。

0,瓷磚1,5-
4,瓷磚2,0
2,瓷磚4,1

#include <stdio.h> 
#include <string> 
#include <fstream> 
#include <sstream> 
#include <iostream> 
#include <stdlib.h> 

using namespace std; 

typedef struct 
{ 
    int color; 
    string name; 
    int reward; 
}tile; 

int main() 
{ 

    string line; 

    int numberOfLines = 0; 
    ifstream inputFile("inputFile.txt"); 
    if (inputFile.is_open()) 
    { 
     while(getline(inputFile, line)) 
     { 
      ++numberOfLines; //value to set tile amount 
      cout << numberOfLines <<endl; 
     } 


     tile *tileArray = new tile[numberOfLines]; 
     string stringColor, stringName, stringReward; //declare these values as strings and later convert 

     stringstream ss; //stringstream variable to convert string variable 

     for(int n = 0; n<(numberOfLines-1); n++) 
     { 
      getline(inputFile, stringColor, ','); //delimiter at first comma 
      cout << stringColor << endl; 
      getline(inputFile, stringName, ','); // delimiter at second 
      cout << stringName << endl; 
      getline(inputFile, stringReward); // stop at the end of the line 
      cout << stringReward << endl; 

      ss<<stringColor; 
      ss>>tileArray[n]->color; 
      ss.str(""); 
      ss.clear(); 

      cout << tileArray[n]->color; 

      ss<<stringName; 
      ss>>tileArray[n]->name; 
      ss.str(""); 
      ss.clear(); 

      cout << tileArray[n]->name; 
      ss<<stringReward; 
      ss>>tileArray[n]->reward; 
      ss.str(""); 
      ss.clear(); 

      cout << tileArray[n]->reward; 

     } 

    } 
return 0; 
} 
+0

哪裏的指針數組?你有一個'tile'數組,但我沒有看到指針數組。順便說一句,指針數組將是:'新的瓦* [24];' – 2015-01-26 18:13:12

+1

也許如果你可以使用調試器,並告訴我們哪一行導致的問題。 – 2015-01-26 18:13:49

+1

我建議你刪除數組並使用'std :: vector'。你會有更少的問題。 – 2015-01-26 18:14:43

回答

0

我將簡化使用stringstream對象。使用相同的對象作爲輸入流和輸出流需要深入理解內部位置如何被操縱。

{ 
    // Create a nested block and a local istringstream in the nested scope 
    istringstream ss(stringColor); 
    ss >> tileArray[n]->color; 
} 
cout << tileArray[n]->color; 

同樣,

{ 
    istringstream ss(stringName); 
    ss >> tileArray[n]->name; 
} 
cout << tileArray[n]->name; 

{ 
    istringstream ss(stringReward); 
    ss >> tileArray[n]->reward; 
} 
cout << tileArray[n]->reward; 
+0

謝謝,我接受了你的建議,但是它仍然給出了段錯誤11錯誤... – boido 2015-01-27 14:38:16

+0

@boido,請嘗試張貼[MCVE](http://stackoverflow.com/help/mcve)。 – 2015-01-27 15:30:30