所以我正在使用fscanf读取txt文件。
for (int i = 0; i < totalLines; ++i)
{
fscanf(fp,"%s %s %f %f[^\n]", &cp[i].name, &cp[i].animal, &cp[i].coordinates.lat, &cp[i].coordinates.lng);
printf("Name: %s\nAnimal: %s\nLat: %.6f\nLong: %.6f\n\n", cp[i].name, cp[i].animal, cp[i].coordinates.lat, cp[i].coordinates.lng);
}
问题是它没有设置/打印最里面的结构成员或2个双倍lng和lat的变量。这项工作的最佳方法是什么?我在正确的轨道上吗?我尝试用(双)但是通过错误来施放它。任何想法?
更新
我已经将代码更新为应该如何,并且我仍然获得0值。任何想法为什么?
答案 0 :(得分:1)
考虑您的结构如下:
/* Structure Holding Coordinates */
typedef struct location
{
double lat;
double longt;
}location_t;
typedef struct geo
{
char name[64];
char animal[64];
location_t loc;
} geo_t;
您的阅读工作如下:
geo_t arr[NO_ENTRIES]; /* NO_ENTRIES is total lines in file */
for(i = 0; i< NO_ENTRIES; i++)
fscanf(fp, " %s %s %lf %lf", arr[i].name, arr[i].animal, &arr[i].loc.lat, &arr[i].loc.longt);
printf("After Reading\n\n\n");
for(i = 0; i< NO_ENTRIES; i++)
printf(" %s %s %f %f\n", arr[i].name, arr[i].animal, arr[i].loc.lat, arr[i].loc.longt);
请在此处查看:http://ideone.com/99dmvL
答案 1 :(得分:0)
使用%f
代替%s
获取双倍值。
fscanf(fp,"%s %s %f %f", cp[i].name, cp[i].animal, &cp[i].coordinates.lat, &cp[i].coordinates.lng);
此外,您的printf会出错。我建议你这样做:
printf("Name: %s\nAnimal: %s\nLat: %f\nLong: %f\n\n", cp[i].name, cp[i].animal, cp[i].coordinates.lat, cp[i].coordinates.lng);
"%lf"
。您的变量是双倍的,因此您应该使用"%f"
。"%.5f"
。它告诉printf在小数点后输出5位数。答案 2 :(得分:0)
对于double,请使用%lf
,就像您在printf
中所做的那样。所以将代码更改为:
fscanf(fp,"%s %s %lf %lf", cp[i].name, cp[i].animal, &cp[i].coordinates.lat, &cp[i].coordinates.lng);
答案 3 :(得分:0)
当你试图读取长双值时,你应该使用%lf代替%s,其中你正在扫描双值 例如:fscanf(fp,“%lf”,&amp; double_value);
答案 4 :(得分:0)
您必须使用浮点控制字符串获取值。不是字符串控制字符串。
fscanf(fp,"%s %s %lf %lf", cp[i].name, cp[i].animal, &cp[i].coordinates.lat, &cp[i].coordinates.lng);