写入没有struct的结构

时间:2014-12-12 08:13:04

标签: c struct header-files scanf

所以我正在使用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值。任何想法为什么?

5 个答案:

答案 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"
  • 在printf调用中,如果需要,请使用如下格式说明符:"%.5f"。它告诉printf在小数点后输出5位数。

您也可以参考fscanf&amp; fprintf文档。

答案 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);