C程序输出错误

时间:2016-10-14 17:49:44

标签: c function struct

任何人都可以找到这个缺陷并解释下面的程序吗?我会向你介绍一下 1)使用程序中的结构来存储有关产品的信息。 2)找到最低价格并显示它。 一切正常,但输出没有给出最低值。

#include <stdio.h>
#include <malloc.h>

struct product{
    int code;
    char name[30];
    float price;
    int qty;
};

void prodata(struct product *p,int n){
    int i;
    for (i=0;i<n;i++){
        printf("\n Enter the Item Code. : ");
        scanf("%d",&p[i].code);
        fflush(stdin);
        printf("\n Enter the Item Name. : ");
        scanf("%s",&p[i].name);
        printf("\n Enter the Item Price. : ");
        scanf("%f",&p[i].price);
        printf("\n Enter the Item Quantity in hand. : ");
        scanf("%d",&p[i].qty);
    }
}
void dispdata(struct product *p, int n){
    int i;
    int min;
    min = 0;  
    for ( i = 1 ; i < n ; i++ ){
        if (p[i].price < p[min].price) {
            min = i;    
        }
    }
    printf("\n ** The Cheapest Product ** \n");
    printf("\n The Product Code        : %d \n",p[min].code);
    printf("\n The Product Name is     : %s \n",p[min].name);
    printf("\n The Product Price is    : %f \n",p[min].price);
    printf("\n The Product Stock       : %d \n",p[min].qty);
}

main(){
    struct product *p=NULL;
    int n;
    printf("\n Product Information. \n");
    printf("\n Please Enter the Number of Items : ");
    scanf("%d",&n);
    while(n<=1){
        printf("\n Please Enter correct number of items : ");
        scanf("%d",&n); 
    }
    p =(struct product*)malloc(sizeof(struct product)*n);
    prodata(p,n);
    dispdata(p,n);
    return 0;
}

2 个答案:

答案 0 :(得分:1)

if (p[i].price < min) {
min = i;    
}

您将min设置为索引,而不是对象的实际价格。

答案 1 :(得分:-1)

除了Daniel的回复,请确保将i索引为0.您的陈述应该是:

for(i = 0; i < n; i++) {....

现在你缺少1个整个产品,因为你的for循环开始计数为1,并且在我迭代到(n-1)并在for循环中执行代码块之后结束