2017-02-23 99 views
0
int boardDim(ifstream & inputFile, unsigned int x, unsigned int y) { 
    inputFile.open("test.txt"); 
    if (!(inputFile.is_open())) { 
     throw fileNotOpen; 
    } 
    else { 
     stringstream output; 
     string output1; 
     if (getline(inputFile, output1)) { 
      output << output1; 
      if (output >> x) { 
       if (output >> y) { 
        return success; 
       } 
       return secBoardVarErr; 
      } 
      return firstBoardVarErr; 
     } 
     return lineErr; 
    } 
    cout << x << endl; 
    cout << y << endl; 
} 

輸入文件包含兩行int s,「10 11」。C++ getline()函數未按預期工作

我返回lineErr。我似乎無法弄清楚爲什麼我的getline()函數返回false。

+2

請編輯您的問題包含一個[MCVE] – Slava

+1

確定該程序不是在一箇舊的空test.txt文件存在一些意想不到的目錄下運行?特別是從IDE運行時,當前工作目錄可能不在您期望的位置。另外,你確定'lineErr'和'success'是不同的值嗎?在返回成功之前移動'cout'語句是一個好主意,所以你可以看到它們(並確定解析是否正常工作)。 –

+0

如果您想使用從該函數以外的文件中讀取的x和y的值,則應將它們作爲參考傳遞。 –

回答

2

後,你寫output流,你在流的末尾。爲了能夠再次讀取數據,你需要尋求到流的開頭:

output.seekg(0, ios_base::beg); 

BTW,output是您正在閱讀流一個非常糟糕的名字。 :-)

+0

由於getline()函數返回false,因此它並沒有被寫入輸出流。然而,我會實施你的解決方案。謝謝! 和哈哈你是對的,我在想這個流包含我將返回的最終值。 – Harrison

+0

FWIW,我通常做'getline' _then_在成功'if'範圍創建一個'的std :: istringstream輸入(線路);' - 通過提供施工期間的內容,則避免需要流中讀取行。 –

+0

@哈里森:_「getline()函數返回false」_你怎麼知道?無論如何,不​​,getline()永遠不會返回false。 –