简单的C:atof给出了错误的价值

时间:2012-03-25 17:27:44

标签: c pointers

我有一个程序可以从单行读取输入(显然是字符串)并将其组织成数组。

我遇到的问题是程序在某一时刻读取两个不同的值并返回第一个两次。最初我认为该程序读取相同的值两次,但是当我测试它时发现它得到了正确的但却输入了错误的值。

例如

  

输入:2 0.90 0.75 0.7 0.65

抱歉抓住它

(while(fgets (string[test], sizeof(string[test]),ifp))
pch = strtok_r(NULL, " ", &prog);
tem3 = atoi(pch);
while (loop<tem3)
{
    pch=strtok_r(NULL," ",&prog);
    venseatfloat[test][loop][DISCOUNT][OCCUPIED]=(float)atof(pch);
    printf("%f is discount\t",venseatfloat[test][loop][DISCOUNT][OCCUPIED]);

    pch=strtok_r(NULL, " ", &prog);
    strcpy(temp, pch);
    venseatfloat[test][loop][REGULAR][OCCUPIED]=(float)atof(pch);
    printf("%s is the string but %.3f is regular\n", temp ,venseatfloat[test][loop][DISCOUNT][OCCUPIED]);
    loop++;

}

输出:

>0.900000 is discount    0.75 is the string but 0.900 is regular

>0.700000 is discount    0.65 is the string but 0.700 is regular

发生了什么事?

1 个答案:

答案 0 :(得分:2)

在第二次阅读中,你正在阅读venseatfloat [test] [loop] [REGULAR] [OCCUPIED],但是printf'ing venseatfloat [test] [loop] [DISCOUNT] [OCCUPIED]。 (注意REGULAR与折扣。)