0

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

为什么输出与输入不匹配?

4

2 回答 2

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期望chars 时传递指针,浮点数和整数也是如此。

您将这些变量的地址传递给,scanf以便函数可以更改它们的值。当您使用%d,%f时,%c printf需要一个 int(不是指向 int 的指针)、一个 float(不是指向 float 的指针)和一个 char(不是指向 char 的指针)。

于 2012-06-22T04:06:20.123 回答
2

您的程序存在多个问题:

  • char适合单个字符。存储书名不够大。
  • 您将地址传递给scanf,但将值传递给printf(即没有&onprintf的参数,除了可能%p的参数)
  • 您不需要fflush输入流 - 它没有效果。

我认为您应该更改char namechar name[101](或您喜欢的任何其他最大尺寸),并且scanf("%c...", &b1.name,...)scanf("%100s...", b1.name,...). 请注意与符号&是如何从 中丢失的b1.name:这是因为数组在传递给 C 中的函数时会衰减为指针。

于 2012-06-22T04:06:29.913 回答