我有以下代码从文件中读取列表数字,但fscanf返回-1。我做错了吗?
提前致谢
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <errno.h>
int main(int argc, char** argv) {
FILE *in;
if (argc != 2) {
fprintf(stderr,"Wrong number of parameters.\n");
fprintf(stderr,"Please give the path of input file.\n");
return 1;
}
if((in = fopen(argv[1],"r")) == NULL) {
fprintf(stderr,"\'%s\' cannot be opened.\n",argv[1]);
}
int lines = 0;
char c;
while( (c=fgetc(in)) != EOF) {
if(c == '\n') {lines++;}
}
printf("%d lines\n",lines);
int i = 0;
double a, b;
double x[lines], y[lines];
for(i; i < lines; i++) {
if(fscanf(in,"%lf %lf", &a, &b) != 2) {
fprintf(stderr,"Wrong input format.\n");
}
printf("%lf %lf",a,b);
}
return (EXIT_SUCCESS);
}
答案 0 :(得分:1)
您已经使用fgetc
完全阅读了该文件,因此当您调用fscanf
时,读取指针已经位于文件的末尾。
您可以使用
手动将读取指针放在开头fseek(in, 0, SEEK_SET);
在你的循环前面。
答案 1 :(得分:1)
你读完整个文件以找到行数。所以在结尾文件指针已经到了结尾..当你打电话给&#39; fscanf&#39;又一次?
您需要将文件指针重置为重新开始
printf("%d lines\n",lines);
rewind(in);
int i = 0;