遵循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,因为它匹配一组类似的代码,我想让它们保持相似,如果可能的话。
我怀疑这是可能的,而且我正在使用这种格式?
答案 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;
}