我有一个用逗号分隔的字符串的存档我想将每一行放入 2 个数组:v[i].date 和 v[i].value。 但是,当我运行代码时,它会显示数组的随机值。 有什么我应该改变的吗?
Input
1761
02/20/18,11403.7
02/19/18,11225.3
02/18/18,10551.8
02/17/18,11112.7
02/16/18,10233.9
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
typedef struct{
char data[10];
double valor;
}vetor;
int main(int argc,char *argv[]){
FILE *csv;
if((csv=fopen(argv[1], "r")) == NULL )
{
printf("not found csv\n");
exit(1);
}
long int a=0;
char linha[256];
char *token = NULL;
if(fgets(linha, sizeof(linha), csv))
{
token = strtok(linha, "\n");
a =(atoi(token));
}
printf("%d\n", a);
rewind(csv);
vetor *v;
v=(vetor*)malloc(a*sizeof(vetor));
char linha2[256];
while (fgets(linha2, sizeof(linha2), csv) != 0)
{
fseek(csv, +1, SEEK_CUR);
for(int i=0;i<a;i++)
{
fscanf(csv, "%s[^,]", v[i].data);
fscanf(csv, "%lf[^\n]", &v[i].valor);
}
}
printf("%d\n", v[0].valor);
fclose(csv);
return 0;
}
最佳答案
您的 data
字段现在只包含一个 char
。它至少需要为典型值留出空间,例如 02/19/18。
例如使用 char[10]
(如果您确定它永远不会超过 9 个字符)。
我认为编译器应该针对您的 fscanf
调用发出警告。
关于C 将逗号分隔的字符串转换为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49391363/