使用带有多个小数的scanf和scanset读取CSV

时间:2018-04-14 21:48:10

标签: c scanf

遵循this question中的扫描集格式,我尝试了稍微不同的格式来读取多个数字而不是一个数字。这是我的数据:

722280,"BIRMINGHAM MUNICIPAL AP",AL,-6.0,33.567,-86.750,189

这是我的代码:

char buf[400];
char station[11], city[101], state[11];
int tz, lat, lon, alt;
fgets(buf, sizeof buf, file) // yes, I test this 
sscanf( buf, "%10[^,],%100[^,],%10[^,],%d,%d,%d,%d", station, city, state, &tz, &lat, &lon, &alt);

当我运行时,车站,城市,州和tz都设置正确。但是,lat,lon和alt不是 - 例如lat是1,lon是0。

我在字符串上尝试了很多变体,包括%d之后的[^,],并删除了逗号,没有运气。

是的,我知道我可以使用strtok或其中一个变种来做到这一点,但我想尝试一个sscanf,因为它匹配一组类似的代码,我想让它们保持相似,如果可能的话。

我怀疑这是可能的,而且我正在使用这种格式?

1 个答案:

答案 0 :(得分:1)

使用正确的格式作为建议,以及正确的数据类型。这应该有效:

int main(void)
{
    FILE *file = fopen("test.txt", "r");

    char buf[400];
    char station[11], city[101], state[11];
    float tz, lat, lon;
    int alt;

    while(fgets(buf, sizeof(buf), file))
    {
        sscanf(buf, "%10[^,],%100[^,],%10[^,],%f,%f,%f,%d", 
            station, city, state, &tz, &lat, &lon, &alt);

        printf("%s\n%s\n%s\n%f\n%f\n%f\n%d\n\n", station, city, state, tz, lat, lon, alt);
    }

    return 0;
}