0

私が一日中理解できなかった何かに対するおそらく基本的な質問は何ですか. C++ のコード スニペットを次に示します。

Escape::Escape(std::string filename)
{
   std::ifstream file;
   file.open(filename.c_str());
   if (file.is_open()) {
      file >> gridWidth >> gridHeight >> nKeys;
      std::cout << "gridWidth = " << gridWidth << std::endl;
      std::cout << "gridHeight = " << gridHeight << std::endl;
      std::cout << "nKeys = " << nKeys << std::endl;
      /* irrelevant code below */

基本的に、このコードでテキスト ファイルの最初の 3 つの整数を読み取り、それらを変数 gridWidth、gridHeight、および nKeys に保存します。これらは、「エスケープ」と呼ばれるクラスのプライベート整数です。テキスト ファイルの最初の数行を次に示します。

8
8
1
BUL--/EUR--/BUL--/BU---/BU---/BU---/BU---/BUR--/
(more text below)

このコードの出力例を次に示します。

gridWidth = 107764358
gridHeight = -991553646
nKeys = 0

このコードを複数回実行するgridWidthgridHeight、常にジャンクで、nKeys は常に 0 です。私が間違っていることについてのアイデアはありますか?

編集:問題は、に渡したファイル名にありましたfile.open()。相対ファイル名を渡しましたが、開くことはできますが、ifstream にリンクすることはできませんでした。この問題は、代わりにテキスト ファイルの絶対ファイル名を使用することで解決されました。

4

1 に答える 1

0

代わりにfile >> gridWidth >> gridHeight >> nKeys;これを行う代わりに:

while(file >> gridWidth && file >> gridHeight && file >> nKeys)

これは、結果を文字列に格納してから変換を行うよりも優れています。

于 2013-01-29T03:21:25.853 に答える