Visual Studio中的struct程序

时间:2012-06-22 04:02:01

标签: c visual-studio-2010

在下面的程序中,我没有从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 . . .

为什么输出不匹配输入?

2 个答案:

答案 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中的函数时会衰减为指针。