我对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);
其输出:
费用89美元,2000年到期,并显示在12B
正确的输出:
玉米价格为89美分,于2000年11月到期,显示在12B
答案 0 :(得分:0)
如果您将数据存储在工会中
typedef union {
product_t pro;
experiment_t exp;
packaging_t pack;
aisle_t ais;
} figure_t;
每次只存储一组数据。例如,当您阅读figure->pro.money
和figure->exp.month
时,数据将存储在同一位置并相互覆盖。
因此,当您尝试打印时,它就不存在了!