【发布时间】:2015-01-08 17:22:56
【问题描述】:
我正在编写一个代码,我在其中读取一个 CSV 文本文件,该文件在命令行中作为参数给出。我必须计算给定文件的实验平均值:
例如,如果文件是
Bob's experiment,12,33,55,8
Mary's experiment,99,21,12,0
我必须打印出来 Bob 的实验(数字的平均值) 玛丽的实验(平均数)
这是我的代码:
#include<stdio.h>
#include<stdlib.h>
#include<stdlib.h>
#include<string.h>
int main (int argc, char *argv[]){
FILE* ptr=fopen(argv[1], "rt");
int i=0;
double sum=0;
double count=0;
double ave=0;
if (ptr==NULL){
perror("Error while opening file");
exit(EXIT_FAILURE);
}
while(!feof(ptr)){
char s='a';
while(s!=','){
s=fgetc(ptr);
printf("%c", s);
}
while((char) *ptr)!='\n'){
fscanf(ptr, "%d", &i);
sum+=i;
count++;
}
ave=sum/count;
printf("%.2f", ave);
}
fclose(ptr);
}
}
我得到一个奇怪的无限循环类型的结果。 请告诉我我做错了什么!
}
【问题讨论】:
-
这看起来很可疑:
while(((char) *ptr)!='\n')。取消引用指向FILE的指针,然后尝试将其与字符进行比较似乎是不正确的。 -
还有前面的
while-- 如果文件中没有逗号或换行符会怎样? -
你知道我该如何解决它吗?
-
对于最后一个 while 循环,我试图在指针尚未到达行尾时进行 while 循环说明
-
FILE *不是指向文件内容的指针——它只是一个文件句柄。您必须阅读内容(例如使用fgetc或fscanf),然后才能根据它们做出任何决定。
标签: c file csv average fileparsing