2

ファイルの最初のバイトからユーザーが指定したバイトまで読み取るファイルを書き込もうとしています。ロジックについて助けが必要です。たとえば、ファイルに a から z までの文字だけが含まれていて、最初の 10 個を読み取って表示したい場合。ここに私が書いたものの一部があります:

  char byte;
  inFile.seekg(0L,ios::beg);
  inFile.get(byte);
  cout << byte;

  for(int i = 0; i < num; i++);  //num is an int specified by the user.
  {
      inFile.seekg(1, ios::cur);
      inFile.get(byte);
      cout << byte;
  }
4

1 に答える 1

1

最初の問題 - 行末のセミコロンfor():

    for(int i = 0; i < num; i++);
    {
        ...
    }

コンパイラが実際に見ているのは次のとおりです。

    for(int i = 0; i < num; i++) { /* do nothing num times */ }

    {
        // code that will only run once
    }

したがって、セミコロンを削除します。

次に、バイトを連続して読み取るだけの場合は、それぞれの間をシークする必要はありません。呼び出すだけget()で、シーケンスの次のバイトが取得されます。したがって、seekg()呼び出しを削除します。

最終的な問題 - この関数は実際にinFile.get()合計で呼び出していnum + 1ます。最初の呼び出しはforループの前です。次に、forループ内でtimesget()が呼び出されnumます (つまり、i = 0、1、2、3 ... num-1)。forこれは、ループ カウンターを変更するか、ループの前の呼び出しを(i = 1; i < num; i++)削除することで修正できます。以下のコードでは、2 番目の方法を選択しました。get()for

void run(int num, istream &inFile)
{
    char byte;

    for(int i = 0; i < num; i++)
    {
        inFile.get(byte);
        cout << byte;
    }
}
于 2013-04-05T08:09:23.180 に答える