2017-08-24 144 views
3

我正在編寫一個板9x9(這是一個字符9x9數組)的遊戲。我寫了要根據方案波紋管中的文件保存當前的遊戲狀態的方法:C++從一個文件(包含空格)逐行讀取數據

board.plansza[0][0] 
board.plansza[0][1] 
board.plansza[0][2] 
board.plansza[0][3] 
(...) 
*points in int* 

(其中每行僅有一個字/空間/數)

現在我需要的方法那會讀取這個文件並將數據放回到同一類型的數組中(如果有人決定停止播放,保存遊戲然後希望從之前的狀態繼續)以及點的變量。 問題是,保存文件中的某些行只是一個空格(''),並且我嘗試過的所有方法都因此無法正確讀取它。

我試圖(和失敗)的最新方法:

for (int i = 0; i < ROZMIAR; i++){ 
     for (int j = 0; j < ROZMIAR; j++){ 
      zapis << board.plansza[i][j] << endl; 
     } 
    } 

zapis << user.pkt << endl; 

如何按行讀取文件行,如果一些行只包含一個空間(我不想忽略)?

+2

['而(的std ::函數getline(FILESTREAM,線串){//做的事情}'](http://en.cppreference.com/ w/cpp/string/basic_string/getline)此外,請不要發佈代碼截圖,在代碼中包含代碼 – BoBTFish

回答

3

使用getline(),像這樣:

#include <fstream> 
#include <string> 

int main() 
{ 
    std::ifstream infile("thefile.txt"); 
    std::string line; 
    char matrix[10][2]; 
    int i = 0; 
    while(std::getline(infile, line)) 
    { 
     std:cout << line << std::endl; 
     if(line .find_first_not_of(' ') != std::string::npos) 
     { 
      // There's a non-space. 
      matrix[i++][0] = line[0]; 
     } 
    } 
    return 0; 
} 
+0

'\ n'可能不足以觸發輸出,請嘗試std :: endl。它打印一個新的行,並做一個沖洗 – Davidbrcz

+0

正確@Davidbrcz,答案更新,謝謝你upvote! – gsamaras

+0

@Ania現在工作嗎? – gsamaras