将const char *转换为int

时间:2015-08-28 12:52:57

标签: c csv io

我从CSV文件中读取了4列(整数)。 read函数有效但当我尝试将char值插入数组(整数)时返回此错误

  

类型" const char *"的值无法分配给类型的实体   "浮动"

我尝试使用atoi但返回0000,11111等列表 你能给我一些解决方案吗? 代码:

const char* getfield(char* line, int num)
{
    const char* tok;
    for (tok = strtok(line, ",");
            tok && *tok;
            tok = strtok(NULL, ";\n"))
    {
        if (!--num)
            return (tok);
    }
    return NULL;
}


int main(void)
{

    FILE *pf=fopen("Trajectory_1.csv","r");         
    char line[1024];

    if(pf==NULL){
        printf("ERROR MESSAGE");
        exit(1);
    }
    int x=0;
    while(fgets(line,sizeof(line),pf)){
        char* tmp=strdup(line);
        printf("%s",getfield(tmp,1));
        t_h[x]=getfield(tmp,1);
        free(tmp);
        x++;
    }
    fclose(pf);
}

在这种情况下只有第一列

修改 代码将是

double getfield(char* line, int num)
{
    const char* tok;
    for (tok = strtok(line, ","); //comam separator
            tok && *tok;
            tok = strtok(NULL, ";\n"))
    {
        if (!--num)
            return (atof(tok));
    }
    return NULL;
}

FILE *pf=fopen("//home//user//Documenti//Bello//Dataset1//Trajectories//Trajectory_1.csv","r"); //rivedere
    char line[1024];

    if(pf==NULL){
        printf("ERR MSG");  // I change this like William suggest
        exit(1);
    }

int x=0;

    while(fgets(line,sizeof(line),pf)){

        double d=getfield(line,1)); // I did not understand

    }
    fclose(pf);

1 个答案:

答案 0 :(得分:0)

getField将返回由num标识的CSV列的浮点值。每次调用getField并使用新行进行解析。

然后函数应该返回一个double,即return(atof(tok));(并声明为double getfield(..);

您必须删除print语句,因为它调用getField但getField修改字符串(通过strtok)。似乎也没有必要致电strdup;让getField在line上工作。

注意:我不是strtok专家,但第二次调用(在for语句中)可能是错误的,也可能需要逗号作为终止符。