如何将指针与getc结合使用?

时间:2010-09-29 17:40:21

标签: c pointers getch

我有一个函数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 个答案:

答案 0 :(得分: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.
}

答案 1 :(得分:2)

每次调用getNum时都会重新打开文件,所以你很自然地回到了开始状态。

而是在main中打开文件并将FILE *传递给getNum()。

答案 2 :(得分:1)

您正在使用每个函数调用重新打开文件。新打开的文件从头开始扫描。

另一种方法是在getNum()之外打开文件一次。您可以将FILE *作为参数传递给getNum()。

此外,您还没有关闭该文件。在对getNum()的所有调用之后,使用fclose()关闭文件。

答案 3 :(得分: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 );