在下面的程序中,我没有从printf
获得值。
#include<stdio.h>
int main()
{
struct book
{
char name;
float price;
int pages;
};
struct book b1,b2,b3;
printf("enter names prices & no. of pages of 3 books\n");
scanf("%c %f %d",&b1.name,&b1.price,&b1.pages);
fflush(stdin);
scanf("%c %f %d",&b2.name,&b2.price,&b2.pages);
fflush(stdin);
scanf("%c %f %d",&b3.name,&b3.price,&b3.pages);
fflush(stdin);
printf("and this is what you entered\n");
printf("%c %f %d",&b1.name,&b1.price,&b1.pages);
printf("%c %f %d",&b2.name,&b2.price,&b2.pages);
printf("%c %f %d",&b3.name,&b3.price,&b3.pages);
return 0;
}
这个输出我正在
enter names prices & no. of pages of 3 books
a 34.6 23
b 23.4 34
c 63.5 23
and this is what you entered
0.000000 0∞ 0.000000 0╪ 0.000000 0Press any key to continue . . .
为什么输出不匹配输入?
答案 0 :(得分:3)
printf("%c %f %d",&b1.name,&b1.price,&b1.pages);
printf("%c %f %d",&b2.name,&b2.price,&b2.pages);
printf("%c %f %d",&b3.name,&b3.price,&b3.pages);
太多的复制和粘贴方法。当printf
期望char
时,您正在传递指针,浮点数和整数相同。
您将这些变量的地址传递给scanf
,以便该函数可以更改其值。当您使用%d
时,%f
和%c
printf
需要一个int(不是指向int的指针),一个float(不是指向float的指针)和一个char (不是指向char的指针)。
答案 1 :(得分:2)
您的计划存在多个问题:
char
适合单个角色。它不足以存储书的标题。scanf
,但是您将值传递给printf
(即&
的参数上没有printf
,除了可能%p
'参数)fflush
输入流 - 它没有效果。我认为您应该将char name
更改为char name[101]
(或您更喜欢的其他任何最大尺寸),scanf("%c...", &b1.name,...)
更改为scanf("%100s...", b1.name,...)
。请注意&
中的&符号b1.name
是如何丢失的:这是因为数组在传递给C中的函数时会衰减为指针。