2017-06-22 36 views
-4

此代码旨在从“pivo.txt”中的啤酒列表中找到最昂贵的啤酒。 当它正在寻找最便宜的啤酒时,if语句被执行并且程序工作正常,但是当我将比较符号从>到<时,它从不执行。 这是一个合乎逻辑的问题还是有事可做与比较花车(铸造他们为int没有工作)如果陈述只在比较双打时有效?

#include <stdio.h> 
#include <stdlib.h> 
typedef struct{ 
    char ime[50]; 
    double kol; 
    double cijena; 
}pivo; 

char* cheap_price(pivo *p,int n) 
{ 
    int i=0,j=0; 
    double raz,maxraz; 
    maxraz = p[i].kol/p[i].cijena; 
    for(i=0;i<n;i++) 
    { 
     raz = p[i].cijena/p[i].kol; 
     printf("%lf\n",raz); 
     if(raz<maxraz) 
     { 
      maxraz = raz; 
      printf("min%lf\n",maxraz); 
      j=i; 
     } 
    } 
    return p[j].ime; 
} 

int main() 
{ 
    pivo *p; 
    int n,i; 
    FILE *file = fopen("pivo.txt","r"); 
    fscanf(file,"%d",&n); 
    p = (pivo*)malloc(n*sizeof(pivo)); 
    for(i=0;i<n;i++) 
     fscanf(file,"%s %lf %lf",p[i].ime,&p[i].kol,&p[i].cijena); 
    printf("\nCheapest beer is %s",cheap_price(p,n)); 
} 

txt文件看起来像这样

9 
Zlatorog 0.33 13.00 
Calsberg 0.5 17.00 
Ozujsko 0.5 13.00 
Stella 0.33 13.00 
Tuborg 0.5 15.00 
Karlovacko 0.33 14.00 
Guiness 0.33 18.00 
Bavaria 0.25 15.00 
Becks 0.33 17.00 

而且从调试我在if语句中放置的printf是空的(如果从不执行)

+0

把更多的printfs放在里面。 – OldProgrammer

+1

首先可以请你正确缩进,其次,我认为你不需要太多的代码来证明你的观点。第三,你没有证明你的观点。 –

+0

@ Jean-FrançoisFabre当我切换比较符号时,if语句奇迹般地不执行。我在第一句话中没有证明我的观点? –

回答

1

它是kol/cijena(如最初分配给maxraz)还是cijena/kol(如在循环中)?

char* cheap_price(pivo *p,int n) 
{ 
    int i=0,j=0; 
    double raz,maxraz; 
    maxraz = p[i].kol/p[i].cijena; 
    //   ^^^  ^^^^^^ 
    for(i=0;i<n;i++) 
    { 
     raz = p[i].cijena/p[i].kol; 
     //   ^^^^^^  ^^^ 
     printf("%lf\n",raz); 
+0

@pmg:我敢打赌,你在使用你的手机,并混淆了“评论”和“回答”。发生在我身上了!和Android SO客户端不会让你删除你的答案/评论! –

+0

我讨厌它,当我不小心[TAB]和[ENTER] ... –

+0

是的,我在我的手机上:-)使它很难有效地使用SO。 – pmg