Считывание структуры. Как сделать для "Price" числовой тип? - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Всем привет! Помогите разобраться со считыванием структуры из файла.
Листинг программы
  1. struct Price
  2. {
  3. char item[20];
  4. char shop[20];
  5. float price;
  6. } goods[n], tmp;
  7. i = 0;
  8. FILE *file;
  9. file = fopen("c:\\Price.txt","r");
  10. while(!(feof(file)))
  11. {
  12. fscanf(file, "%s %s %f", goods[i].item, goods[i].shop, goods[i].price);
  13. i++;
  14. }
Когда у "Price" стоит тип FLOAT, программа не запускается и выдает ошибку в файле "input.c":
Листинг программы
  1. _FASSIGN( longone-1, (char*)pointer , pFloatStr, (char)decimal, _loc_update.GetLocaleT());
Если INT:
Листинг программы
  1. if (longone)
  2. *(long UNALIGNED *)pointer = (unsigned long)number;
Сам файл:
Листинг программы
  1. Abrikos AMSTORE 30
  2. Banan METRO 20
  3. Kolbasa BOOM 100
  4. Ogurec ASSORTI 5
  5. asd das 34
  6. asd dsa 234
  7. fds sdf 234
Если у "Price" тип CHAR, как и у остальных категорий структуры, все работает нормально. Как сделать для "Price" числовой тип? Спасибо.

Решение задачи: «Считывание структуры. Как сделать для "Price" числовой тип?»

textual
Листинг программы
  1. int d1;
  2. int *d2;
  3.  
  4. // где-то здесь выделили память для d2
  5. fscanf(file, "%d %d", &d1, d2);
  6. // d1 - передаётся с помощью опереации получения адреса
  7. // d2 - является адресом и передатся без каких либо операций

Объяснение кода листинга программы

  1. В начале кода объявлены две переменные: d1 и d2. Переменная d1 имеет тип int, а переменная d2 - указатель на int.
  2. Предполагается, что где-то до этого кода была выполнена операция выделения памяти для переменной d2.
  3. С помощью функции fscanf происходит попытка чтения двух целочисленных значений из файла file.
  4. В качестве формата передачи данных указывается %d %d, что означает, что ожидаются два целочисленных значения.
  5. Адрес переменной d1 передается с помощью операции получения адреса &, а переменная d2 передается без каких-либо операций, так как она уже является адресом.
  6. Если все идет по плану, то в d1 будет храниться первое прочитанное значение, а в d2 - адрес памяти, где будет храниться второе значение.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.714 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы