c语言程序在不同环境下运行景况不同

c语言程序在不同环境下运行情况不同
我在dev-c++下和VC6.0分别都是输入同样的代码(VC6.0下在retnrn 0;前有加上getch();)
为什么dev-cpp下没结果显示出来(不是窗口一闪而过,而是黑窗口,但没结果输出),而VC6.0下则输出 11 30 ?请大神指导,谢谢
#include
int main()
{
  int i,j;
  float a;
  for(i=1;i<=100;i++)
  {
           for(j=1;j<=100;j++)
          {
                 a=2.3*i+1.9*j;
                if(a==82.3&&i<j)printf("%d %d\n",i,j);
          }
   }
   return 0;
}
------解决方案--------------------
a==82.3
深坑慎入
------解决方案--------------------
float型,由于精度的问题,一般不直接使用==进行比较
------解决方案--------------------
引用:
Quote: 引用:

float型,由于精度的问题,一般不直接使用==进行比较

题目是这样的:啤酒每罐2.3元,饮料每罐1.9元。小明买了若干啤酒和饮料,一共花了82.3元。
    我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒。
那请问按你的看法,应该怎样修改?

一般用if(abs(a-b)<=delta)来判断,delta的值取决于你想要的精度
------解决方案--------------------
引用:
Quote: 引用:

float型,由于精度的问题,一般不直接使用==进行比较

题目是这样的:啤酒每罐2.3元,饮料每罐1.9元。小明买了若干啤酒和饮料,一共花了82.3元。
    我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒。
那请问按你的看法,应该怎样修改?


for (int px = 0; px<823/19; px++)
        for (int yx = 0; yx <823/19; yx ++)
            if (23*px + 19*yx == 823 && px < yx) printf("%d,%d\n", px, yx);

------解决方案--------------------
这个题目的浮点数精度问题,完全可以把价格换算成角或者分来做嘛。

至于dev-c++下不输出结果,是不是dev-c++和VC++6.0的printf函数有点不同?
------解决方案--------------------
引用:
这个题目的浮点数精度问题,完全可以把价格换算成角或者分来做嘛。

至于dev-c++下不输出结果,是不是dev-c++和VC++6.0的printf函数有点不同?

就VC 6这种垃圾,把两个浮点数比较成相等,也不太奇怪。
------解决方案--------------------
引用:
题目是这样的:啤酒每罐2.3元,饮料每罐1.9元。小明买了若干啤酒和饮料,一共花了82.3元。
    我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒。
那请问按你们的看法,应该怎样修改?

同意8楼做法
以角或分为单位,化为整形不但不会出错,性能可能提升(只是可能,但好像有的arm没有浮点指令,会发生质的变化)
------解决方案--------------------
引用:
我在dev-c++下和VC6.0分别都是输入同样的代码(VC6.0下在retnrn 0;前有加上getch();)
为什么dev-cpp下没结果显示出来(不是窗口一闪而过,而是黑窗口,但没结果输出),而VC6.0下则输出 11 30 ?请大神指导,谢谢
#include
int main()
{
  int i,j;
  float a;
  for(i=1;i<=100;i++)
  {
           for(j=1;j<=100;j++)
          {
                 a=2.3*i+1.9*j;
                if(a==82.3&&i<j)printf("%d %d\n",i,j);
          }
   }
   return 0;
}


说实在,新人凡是遇到浮点数的问题统统绕道吧,纠结float没有任何意义。
------解决方案--------------------
这个是精度问题,你可以这么改改 82.3-a < 1e-6,或者把价格都乘10倍,这样就都是整数了。能得出正确结果。浮点数类型不要直接做相等的判断。
------解决方案--------------------
    //朕之解一:
    for (int px = 0; px<823/19; px++)        
        for (int yx = 0; yx <823/19; yx ++)            
            if (23*px + 19*yx == 823 && px < yx) printf("%d,%d\n", px, yx);
    
    //朕之解二:
    for (int px = 0; px<823/19; px++)
        for (int yx = 0; yx <823/19; yx ++)
            if (2.3*px + 1.9*yx <= 82.3 && 2.3*px + 1.9*yx >= 82.3 && px < yx) printf("%d,%d\n", px, yx);

赶紧给分,别磨唧!