2013-07-18 127 views
2

從名稱和值對文件中讀取值時,我設法跳過了名稱部分。但有沒有另一種方法來跳過名稱部分,而不聲明一個虛擬字符串來存儲跳過的數據?如何在按行讀取文件時跳過字符串

實施例文本文件:http://i.stack.imgur.com/94l1w.png

void loadConfigFile() 
{ 
    ifstream file(folder + "config.txt"); 

    while (!file.eof()) 
    { 
     file >> skip; 

     file >> screenMode; 
     if (screenMode == "on") 
      notFullScreen = 0; 
     else if (screenMode == "off") 
      notFullScreen = 1; 

     file >> skip; 
     file >> playerXPosMS; 

     file >> skip; 
     file >> playerYPosMS; 

     file >> skip; 
     file >> playerGForce; 
    } 

    file.close(); 
} 
+0

['ignore'](http://en.cppreference.com/w/cpp/io/basic_istream/ignore)。 – BoBTFish

回答

5

可以使用std::cin.ignore忽略輸入到一些指定的分隔符(例如,一個新的行,跳過整個線)。

static const int max_line = 65536; 

std::cin.ignore(max_line, '\n'); 

雖然很多人建議指定一個最大的像std::numeric_limits<std::streamsize>::max(),我不知道。如果用戶不小心將程序指向了錯誤的文件,那麼在被告知某些內容錯誤之前,它們不應該等待,而是會消耗過多的數據。

其他兩點。

  1. 請勿使用while (!file.eof())。它主要導致問題。對於這樣的情況下,你真的要定義一個structclass握住你的相關值,爲該類定義一個operator>>,然後用while (file>>player_object) ...
  2. 您現在正在閱讀的方式真的試圖讀取一個「字」在一個時間,不是一個整線。如果你想讀一整行,你可能想使用std::getline
+0

你可以顯示你的前兩個其他點嗎?我不知道如何設計(文件>> player_object)。提前致謝。 – user

+0

@user:[一個實施例](http://stackoverflow.com/a/10509958/179910)這是類似於你 - 主要是讀取文本行,幷包括跳過線(儘管它使用'的std :: getline'這樣做)。 –

相關問題