我需要读取CSV表并将其值用于函数,但scanf()
函数只读取文件的第一列。我还需要代码能够读取多个文件,而不允许我指定文件的名称。这样做的正确方法是什么?
示例:
CSV文件行:114 -0.44 -0.15385 -0.76293
代码输出:114 0.00 0.00 0.00
我的代码:
#include <stdio.h>
#include <tgmath.h>
#include <stdlib.h>
int main(){
long sec;
long wait = 0;
int fall = 0;
double x;
double y;
double z;
double mag = 0.0;
long i =0;
while(1){
scanf("%ld %lf %lf %lf", &sec, &x, &y, &z);
mag = sqrt(pow(x,2)+pow(y,2)+pow(z,2));
break;
}
printf("%ld %lf %lf %lf\n", sec, x, y, z);
output1(wait);
output2(fall);
return 0;
}
答案 0 :(得分:0)
如果您使用的是Windows操作系统,则可以使用dirent.h
并创建一个输入目录,您可以在其中存储输入文件。
获得文件后,您可以正确处理并开始从中读取行。由于您有一个csv文件,您可以使用strtok
将行拆分为令牌,然后使用它们加载变量。
答案 1 :(得分:0)
阻止你阅读多个文件的一点是,你是使用stdin读取数据而不是打开你想要的文件?如果你要反复做同样的事情,但是使用不同的输入(即文件名),你应该创建一个函数,就像......
void myfunc(char *filename)
{
FILE *thefile;
double x,y,z;
long sec;
thefile=fopen(filename,"r");
if(thefile)
{
if(fscanf(thefile,"%ld %lf %lf %lf", &sec, &x, &y, &z)==4)
{
/* do stuff */
}
fclose(thefile);
}
}
然后在您的主文件中,您可以使用命令行参数来指定文件名,如此
int main(int argc,char *argv[])
{
int i;
for(i=1;i<argc;i++)
{
myfunc(argv[i]);
}
}