Недавно я пытался написать программу для записи файлов, в которой сохраняются данные инвентаризации по номеру детали, количеству и цене детали. Во время записи в мой двоичный файл мой сканф сохраняет мои цены, но когда я читаю их в моей следующей программе, получается множество бессмысленных чисел, которые я не ввожу.
Компилятор с программой записи: (* * пользовательский ввод)
This program stores a business inventory.
Please enter item data (part number, quantity, price): *2, 3, 1.6*
Please enter item data (part number, quantity, price): *3, 1, 5.3*
Please enter item data (part number, quantity, price): *0*
Thank you. Inventory stored in file inventory.txt
Введите код программы
#include <stdio.h>
#include <stdlib.h>
int main(int argc, int argv[])
{
int pnum=1, quantity;
float price;
FILE *fp1;
fp1 = fopen("inventory.txt", "wb+");
if(fp1 == NULL)
{
printf("Can't open!\n");
exit(EXIT_FAILURE);
}
printf("This program stores a business inventory.\n");
while(pnum != 0)
{
printf("Please enter item data (part number, quantity, price): ");
scanf("%d, %d, %f", &pnum, &quantity, &price);
printf("%d, %d, %f", pnum, quantity, price);
fwrite(&pnum, sizeof(int), 1, fp1);// Is there a way to combine these 3 fwrites into 1?
fwrite(&quantity, sizeof(int), 1, fp1);
fwrite(&price, sizeof(float), 1, fp1);
}
printf("Thank you. Inventory stored in file inventory.txt");
fclose(fp1);
return 0;
}
Компилятор с программой чтения (* * - пользовательский ввод)
Below are the items in your inventory.
Part# Quantity Item Price
2 3 1070386381?
3 1 1084856730?
0? 1 1084856730?
Считать код программы
#include <stdio.h>
#include <stdlib.h>
int main()
{
int pnum, quantity;
float price;
FILE *fp1 = fopen("inventory.txt", "rb");
if(fp1 == NULL)
{
printf("Can't open!");
exit(EXIT_FAILURE);
}
printf("Below are the items in your inventory.\n");
printf("Part#\tQuantity\t Item Price\n");
while (fread(&pnum, sizeof(int), 1, fp1) == 1)//Is there a way to combine these 3 freads into 1 line of code?
{
printf("%5d\t", pnum);
}
while (fread(&quantity, sizeof(int), 1, fp1) == 1)
{
printf("%8d\t", quantity);
}
while (fread(&price, sizeof(float), 1, fp1) == 1)
{
printf("$");
printf("%9.2f\n", price);
}
fclose(fp1);
return 0;
}
Как вы, возможно, заметили, scanf - это scanf, и он должен быть связан с моим float, но я не смог выяснить, как это исправить, потому что без scanf ничего не сохраняется в моем файле inventory.txt ( Я не включил файл .txt, потому что он двоичный), и по какой-то причине, когда я набираю 0, чтобы разорвать цикл, он сохраняет 0 в файле. Если нужна какая-то другая информация, я могу ее предоставить, но я думаю, что предоставил все. Спасибо за любую помощь, и счастливого кодирования:)