注册 登录
编程论坛 C++教室

这个是什么错误?

flysky102 发布于 2008-03-23 14:24, 775 次点击
我按c primer上说的写了个计算中奖率的程序,可是编译时出现了问题,我的英文水平一般,也看不懂什么意思,大家帮我看看错哪了,程序如下:
# include <iostream>
long double pro(unsigned numbers,unsigned picks);
int main()
{ using namespace std;
  double a,b;
  cout<<"请输入总数字和可选数字个数\n";
  while((cin>>a>>b)&&b<=a)
  {cout<<"你的中奖率为:";
    cout<<pro(a,b);
    cout<<"输入Q以结束输入";
   }
   cout<<"bye\n";
   system("pause");
   return 0;
}
 long double pro(unsigned numbers,unsigned picks)
 { long double c=1.0;
   long double n;
   unsigned d;
   for(n=numbers,d=picks;d>0;n--,d--)
    c=c*n/d;
    return c;
}
   错误提示如下:
   9 C:\Documents and Settings\cface\桌面\新建文件夹\Untitled1.cpp [Warning] passing `double' for converting 1 of `long double pro(unsigned int, unsigned int)'
   9 C:\Documents and Settings\cface\桌面\新建文件夹\Untitled1.cpp [Warning] passing `double' for converting 2 of `long double pro(unsigned int, unsigned int)'
9 回复
#2
sunkaidong2008-03-23 14:27
参数类型不对。。。把基础看好。。不急看primer
#3
flysky1022008-03-23 14:44
可是我是仿照primer 第5版上说的一个程序编写的啊,搞不懂了。。。我学C++也是按论坛上的推荐买的primer这本书的
#4
sunkaidong2008-03-23 14:51
我编译了一下没有警告也没有错误提示,我用vc++6.0
#5
zjl1382008-03-23 16:22
类型不配。
long double pro(unsigned numbers,unsigned picks);这里你参数类型为UNSIGNED,而double a,b;这里又为double.当然会有警告。
你试着自已修改一下,把类配改为相匹配。
#6
newyj2008-03-23 16:38
不是会隐式的类型转换吗
#7
zjl1382008-03-23 16:42
会,所以是warning而不是error!!!
#8
goodlucklj2008-03-23 17:06
我试了一下,编译运行都没有问题呀!!
这个程序中的   
      cout<<"输入Q以结束输入";是不是有问题呀??
#9
aipb20072008-03-23 17:30
你调用函数做个c的显示的转换
pro((unsigned)a,(unsigned)b);

隐式转换发生的条件是类型扩展,即没有信息丢失。
显然,从double到int被截断了,所以不能隐式转换。
#10
flysky1022008-03-23 20:33
我把double a,b;修改为了int a,b后程序可以编译了,我用的是dev-c++编译器
1