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