scanf不会在结构中存储适当的信息

时间:2011-06-12 11:03:14

标签: c struct scanf

我对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.namefigure->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);

其输出:

  

     

费用89美元,2000年到期,并显示在12B

正确的输出:

  

玉米价格为89美分,于2000年11月到期,显示在12B

1 个答案:

答案 0 :(得分:0)

如果您将数据存储在工会中

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

每次只存储一组数据。例如,当您阅读figure->pro.moneyfigure->exp.month时,数据将存储在同一位置并相互覆盖。

因此,当您尝试打印时,它就不存在了!