0

(ファイルが既に存在する場合) 最初の数値を 1 つ増やし、関数のパラメーターをファイルの末尾に追加する関数を作成しています。

例:

  1. 追加 (4,9);
  2. 追加 (5,6);

1 のファイルの内容: 1 \n 4 \n 9

2 のファイルの内容: 2 \n 4 \n 9 \n 5 \n 6

int append (int obj, int objType) {

ifstream infile;
infile.open("stuff.txt");

if (infile.fail()){
  infile.close();

  ofstream outfile;
  outfile.open("stuff.txt");
  outfile << 1 << endl << obj << endl << objType;
  outfile.close();
}
else {

  int length = 0;

  while (!infile.eof()){
     int temp;
     infile >> temp;
     length ++;
  }

  infile.close();
  infile.open("stuff.txt");

  int fileContents[length];
  int i = 0;

  while (!infile.eof()){ /*PROGRAM DOES NOT ENTER HERE*/
     infile >> fileContents[i];
     i ++;
  }

  infile.close();

  ofstream outfile;
  outfile.open("stuff.txt");

  fileContents[0] +=1;

  for (i = 0; i < length; i++){
     outfile << fileContents[i] << endl ;
  }

  outfile << obj << endl << objType;


}

プログラムは 2 番目の while ループに入らないため、内容が配列にコピーされてからファイルにコピーされることはありません。問題が何であるか、またはそれを修正する方法が正確にわかりません。どんな助けでも大歓迎です。:)

4

2 に答える 2

2

この方法でファイルを閉じて再度開くのではなく (この操作で必要なファイル位置がリセットされるかどうかはわかりません!) std::fstream::seekg()、ファイルを最初に「巻き戻す」だけではどうですか?

infile.seekg(0, ios::beg)
于 2009-12-01T19:11:53.500 に答える
2

EOF フラグをリセットするための読み取りをまだ行っていないため、まだ前のファイルから EOF を取得しています。

とにかく、これはファイル入力を行う正しい方法ではありません。このようなことをもっと試してください:

int temp;
while (infile >> temp)
{
    ...
}

また、以前の質問でリンクした Neil Butterworth のブログ エントリを参照してください: http://punchlet.wordpress.com/2009/12/01/hello-world/

于 2009-12-01T19:09:54.817 に答える