2014-12-12 2 views
0

Итак, я читаю из txt-файла с помощью fscanf., ссылаясь на структуру со структурой

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 и латы не быть назначены. Какой лучший способ сделать эту работу? я на правильном пути? Я пытался использовать его с помощью (double), но с ошибками. есть идеи?

UPDATE

Я обновил код на то, как это должно быть, и им по-прежнему получать значение 0 на всех. любые идеи почему?

+0

У меня есть обновил мой код и до сих пор не повезло. Это швы, как двойник, не хочет быть там. – Definity

+1

Показать объявление структуры. –

+0

Вы можете увидеть разницу между '& cp [i] .name, & cp [i] .animal,' и 'cp [i] .name, cp [i] .animal,' –

ответ

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

0

%f вместо %s для двойных значений.

fscanf(fp,"%s %s %f %f", cp[i].name, cp[i].animal, &cp[i].coordinates.lat, &cp[i].coordinates.lng); 

Также у вашей печати будет ошибка. Я предлагаю вам сделать это:

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 & fprintf.

+0

Спасибо за помощь, но значение еще 0.0000, когда я их распечатываю. – Definity

+0

Надеюсь, ваше объявление структуры будет проблемой. можете ли вы разместить здесь объявление структуры. –

0

Для двойного использования используйте %lf, как и то, что вы сделали в printf. Так измените код на:

fscanf(fp,"%s %s %lf %lf", cp[i].name, cp[i].animal, &cp[i].coordinates.lat, &cp[i].coordinates.lng); 
0

Как у пытаются читать длинные двойные значения и должны использовать% LF вместо% с, где и сканируют двойные значения от пример: fscanf (Fp, «% Lf», & double_value);

0

Вы должны получить значение с помощью строки управления с плавающей точкой. Не строка управления строкой.

fscanf(fp,"%s %s %lf %lf", cp[i].name, cp[i].animal, &cp[i].coordinates.lat, &cp[i].coordinates.lng);