Некорректная печать данных при работе с данными запаса в файле в C - PullRequest
0 голосов
/ 26 апреля 2019

В настоящее время я работаю над программой, которая получает количество и цену 5 продуктов и записывает их в текстовый файл, распечатывая все данные в виде таблицы и затем печатая одну из выбранных цен.записывает только данные последнего продукта в распечатанную таблицу, и цена выбранного продукта печатает 0.

#include <stdio.h>
#include <stdlib.h>

typedef struct Stock {
    int quantity;
    float price;
};
void print_stock(Stock a, int len) {
    for (int code = 0; code < len; code++)
        printf("code[%d] %4f %4d\n", code, a.price, a.quantity);
}

int main() {
    FILE *fp = fopen("stocks.txt", "w+");
    Stock a;
    if (fp == NULL) {
        puts("File couldn't be opened.\n");
        exit(1);
    }
    int code, c;
    char arr_code[5];
    int len = sizeof(arr_code) / sizeof(arr_code[0]);
    int option;
    printf("There will be %d product(s) in the stock.\n", len);
    for (code = 0; code < len; code++) {
        printf("Enter the product's quantity:");
        scanf("%d", &a.quantity);
        printf("Enter the product's price:");
        scanf("%f", &a.price);
        fprintf(fp, "quantity-%7d price-%7f\n", a.quantity, a.price);
    }
    print_stock(a, len);

    fclose(fp);

    FILE *fp2 = fopen("stocks.txt", "r");
    printf("Enter an option(starts from 0):\n");
    scanf("%d", &option);
    fseek(fp2, option * sizeof(struct Stock), SEEK_SET);
    fread(&a, sizeof(struct Stock), 1, fp2);
    printf("the price is %f\n", a.price);

    fclose(fp2);
}

Я ожидал, что результат будет примерно таким:

    There will be 5 product(s) in the stock.
    Enter the product's quantity:76
    Enter the product's price:88
    Enter the product's quantity:5
    Enter the product's price:44
    Enter the product's quantity:89
    Enter the product's price:32
    Enter the product's quantity:54
    Enter the product's price:33
    Enter the product's quantity:94
    Enter the product's price:65
    code[0] 88.000000   76
    code[1] 44.000000   5
    code[2] 32.000000   89
    code[3] 33.000000   54
    code[4] 65.000000   94
    Enter an option(starts from 0):
    2
    the price is 32.000000

Но я получаюэтот результат:

    There will be 5 product(s) in the stock.
    Enter the product's quantity:76
    Enter the product's price:88
    Enter the product's quantity:5
    Enter the product's price:44
    Enter the product's quantity:89
    Enter the product's price:32
    Enter the product's quantity:54
    Enter the product's price:33
    Enter the product's quantity:94
    Enter the product's price:65
    code[0] 65.000000   94
    code[1] 65.000000   94
    code[2] 65.000000   94
    code[3] 65.000000   94
    code[4] 65.000000   94
    Enter an option(starts from 0):
    3
    the price is 0.000000

1 Ответ

0 голосов
/ 26 апреля 2019

На данный момент вы печатаете последнее содержимое a несколько раз.

Просто переместите print_stock вызов функции внутри цикла for, передав len как 1.

for (code = 0; code < len; code++) {
    printf("Enter the product's quantity:");
    scanf("%d", &a.quantity);
    printf("Enter the product's price:");
    scanf("%f", &a.price);
    fprintf(fp, "quantity-%7d price-%7f\n", a.quantity, a.price);

    print_stock(a, 1);
}

Также следует учитывать индекс при печати. ​​

void print_stock(Stock a[], int len) {
    for (int code = 0; code < len; code++)
        printf("code[%d] %4f %4d\n", code, a[code].price, a[code].quantity);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...