Считывание структуры. Как сделать для "Price" числовой тип? - C (СИ)
Формулировка задачи:
Всем привет! Помогите разобраться со считыванием структуры из файла.
Когда у "Price" стоит тип FLOAT, программа не запускается и выдает ошибку в файле "input.c":
Если INT:
Сам файл:
Если у "Price" тип CHAR, как и у остальных категорий структуры, все работает нормально. Как сделать для "Price" числовой тип?
Спасибо.
struct Price
{
char item[20];
char shop[20];
float price;
} goods[n], tmp;
i = 0;
FILE *file;
file = fopen("c:\\Price.txt","r");
while(!(feof(file)))
{
fscanf(file, "%s %s %f", goods[i].item, goods[i].shop, goods[i].price);
i++;
}_FASSIGN( longone-1, (char*)pointer , pFloatStr, (char)decimal, _loc_update.GetLocaleT());
if (longone)
*(long UNALIGNED *)pointer = (unsigned long)number;Abrikos AMSTORE 30 Banan METRO 20 Kolbasa BOOM 100 Ogurec ASSORTI 5 asd das 34 asd dsa 234 fds sdf 234
Решение задачи: «Считывание структуры. Как сделать для "Price" числовой тип?»
textual
Листинг программы
int d1; int *d2; // где-то здесь выделили память для d2 fscanf(file, "%d %d", &d1, d2); // d1 - передаётся с помощью опереации получения адреса // d2 - является адресом и передатся без каких либо операций
Объяснение кода листинга программы
- В начале кода объявлены две переменные:
d1иd2. Переменнаяd1имеет тип int, а переменнаяd2- указатель на int. - Предполагается, что где-то до этого кода была выполнена операция выделения памяти для переменной
d2. - С помощью функции
fscanfпроисходит попытка чтения двух целочисленных значений из файлаfile. - В качестве формата передачи данных указывается
%d %d, что означает, что ожидаются два целочисленных значения. - Адрес переменной
d1передается с помощью операции получения адреса&, а переменнаяd2передается без каких-либо операций, так как она уже является адресом. - Если все идет по плану, то в
d1будет храниться первое прочитанное значение, а вd2- адрес памяти, где будет храниться второе значение.