Scanf не хранит правильную информацию в структуре - PullRequest
1 голос
/ 12 июня 2011

У меня проблема с scanf. scanf не хранит правильную информацию в структуре. Часть кода:

if( figure->pro.p_category == 'C' || figure->pro.p_category == 'c' ){
    printf("Enter data line> ");
    result += scanf("%s %d%c %d %d %d%c", (figure->pro.name), &temp,\
    &figure->pro.money, &figure->exp.month, &figure->exp.year,\
    &figure->ais.aisle_num, &figure->ais.aisle_side);
    if ( figure->pro.money == 'C')
        figure->pro.cents = temp;
    else if( figure->pro.money == 'D')
        figure->pro.dollars = temp;
}

figure->pro.name и figure->exp.month хранят разные значения.

Мои структуры:

typedef struct {
    char name[20];
    char p_category,
        sub_p_category,
        money;
    int cents,
        dollars;
}product_t;

typedef struct {
    int aisle_num;
    char aisle_side;
}aisle_t;

typedef struct {
    int day,
        month,
        year;
}experiment_t;

typedef struct {
    int day,
        month,
        year;
}packaging_t;

typedef union {
    product_t pro;
    experiment_t exp;
    packaging_t pack;
    aisle_t ais;
}figure_t;

Например;

input> corn 89C 11 2010 11B

Этот кусок кода из функции вывода:

printf("The %s costs %d cents, expires in ",my_figure.pro.name, my_figure.pro.cents);

            print_exp_month(my_figure);
            printf("of %d, and is displayed in %d%c", my_figure.exp.year, my_figure.ais.aisle_num,\
            my_figure.ais.aisle_side);

его вывод:

The

стоит 89 долларов, срок действия истекает в 2000 году и отображается в 12B

Правильный вывод:

Кукуруза стоит 89 центов, срок годности истекает в ноябре 2000 года и отображается в 12B

1 Ответ

0 голосов
/ 12 июня 2011

Если вы храните ваши данные в союзе

typedef union {
    product_t pro;
    experiment_t exp;
    packaging_t pack;
    aisle_t ais;
} figure_t;

каждый раз сохраняется только один набор данных. Когда вы читаете, например, figure->pro.money и figure->exp.month, данные будут храниться в одном месте и перезаписывать друг друга.

Так что, когда вы пытаетесь распечатать его, его больше нет!

...