2

我正在尝试运行一个程序,该程序在 c 中实现具有结构的函数......这是:

#include<stdio.h>
#include<conio.h>
struct store
    {
    char name[20];
        float price;    
        int quantity;
    };

struct store update (struct store product, float p, int q);

float mul(struct store stock_value);


    main()
{
    int inc_q;
    float inc_p,value;

    struct store item = {"xyz", 10.895 ,10};  //## this is where the problem lies ##


    printf("name    = %s\n price = %d\n quantity = %d\n\n",item.name,item.price,item.quantity);

    printf("enter increment in price(1st) and quantity(2nd) : ");
    scanf("%f %d",&inc_p,&inc_q);

item = update(item,inc_p,inc_q);

    printf("updated values are\n\n");
    printf(" name       = %d\n price      = %d\n quantity    = %d",item.name,item.price,item.quantity);

    value = mul(item);

    printf("\n\n value = %d",value);
}
struct store update(struct store product, float p, int q)
{
    product.price+=p;
    product.quantity+=q;
    return(product);
}    
float mul(struct store stock_value)
{
    return(stock_value.price*stock_value.quantity);
}  

当我初始化struct store item = {"xyz",10.895,10} 时; 成员没有存储值,即在成员中使用此(结构存储项):

  1. item.name应该是"xyz" ,

  2. item.price应为10.895

  3. item.quantity应该是10

除了item.name =xyz 其他成员采用自己的 垃圾 值..我无法理解这种行为......我正在使用 devc++(带有 mingw 的 5.4.2 版)......

我遇到问题是因为我使用 char name[20] 作为 struct store 的成员吗???

有人请帮助删除我的代码中的错误..尽快回复

4

2 回答 2

10

您正在使用%d格式说明符来打印 a float,这是未定义的行为。您应该使用%f浮点数和%d整数。对于您的代码,应该是:

printf("name    = %s\n price = %f\n quantity = %d\n\n", 
       item.name, item.price, item.quantity);

因为item.price是一个浮点数。

在稍后printf您还使用%d打印字符串item.name。应该改为%s改为。

于 2013-08-27T10:36:17.083 回答
1

请注意,item.quantity将给出 10。然后更改%d%ffor,item.price因为它是浮点类型变量。

于 2013-08-27T12:49:04.457 回答