2

ファイルから数値を取得して返す関数 getNum() があります。getNum() に戻ると、ポインターが失われ、ファイルの最初から再び開始されます。getc の場所を取得して、その場所に戻るにはどうすればよいのでしょうか。マニュアルやフォーラムでこれを行う方法を見つけることができませんでした。ありがとうございました。

#include <stdio.h>
#include <stdlib.h>

int getNum();
int getLine();
int getMatrix();



main() {
int num;
int two;
num = getNum();
printf("%d\n", num);
two = getNum();
printf("%d\n", two);

}

int getNum() {
  FILE *infile;
    infile = fopen("matrix.txt","r");
  int c;
  double value = 0;

  while ((c=getc(infile)) != '\n') {
    if(c==32){
      if(value != 0){
        return(value);
      }
      //otherwise keep getting characters
    }
    else if ((c<=47)||(c>=58)){
      printf("incorrect number input %d\n", c);
      exit(1);
    }
    else {
      value = (10*value) + c - '0';
    }
  }
  return(value);
}
4

4 に答える 4

3

その理由は、実行するたびにファイルを再度開くためですgetNum。読み取り用にファイルを開くと、ファイルの先頭から開始されます。代わりに、一度だけ開きます。

int main(int argc, char *argv[])
{
  ...
  FILE *infile;
  ...
  infile = fopen("matrix.txt","r");
  ...
  getNum(infile)
  ...
  fclose(infile);
  return 0;
}


int getNum(File *infile)
{
  // Same as before, just no file opening.
}
于 2010-09-29T17:46:38.970 に答える
2

getNum を呼び出すたびにファイルを再度開くので、当然最初に戻ります。

代わりに、メインでファイルを開き、FILE * を getNum() に渡します。

于 2010-09-29T17:46:52.063 に答える
1

何かのようなもの:

int getNum( FILE* fp );
...

int n;
FILE* file = fopen( "file.txt" );
assert( file );
do {
    n = getNum( file );
    /* ... */
}
while ( n != -1 ); /* or something */
fclose( file );
于 2010-09-29T17:47:44.037 に答える
1

関数呼び出しごとにファイルを新たに開いています。新しく開いたファイルは最初からスキャンを開始します。

別の方法として、getNum() の外部でファイルを 1 回開くこともできます。FILE* を引数として getNum() に渡すことができます。

また、ファイルを閉じていません。getNum() をすべて呼び出した後、fclose() を使用してファイルを閉じます。

于 2010-09-29T17:47:05.613 に答える