所以我试图在c ++中创建我的第一个非常简单的数学程序之一。问题是
我似乎无法得到函数potodds做我想要的。将它变为多个完全正常的两个变量(x,y)
是没有问题的。当我尝试将返回x*y*100
替换为返回(x/y)*100
时,会出现此问题。在这种情况下,它总是返回值0?
希望有人可以帮助我查明我的错误。
代码如下所示:
#include "stdafx.h"
#include <iostream>
int x;
int y;
int potodds(int x, int y) {
return x * y * 100; //(x/y)*100;
}
int main() {
using namespace std;
cout << "what's the size of the pot?" << endl;
cin >> y;
cout << "what's the size of the bet?" << endl;
cin >> x;
cout << "your potodds are:" << endl;
cout << potodds(x, y) << endl;
return 0;
}
感谢Ebyrob,我得到了解决方案。
我遇到的问题是我试图划分一个整数,它被分配了一个十进制值,根据定义,一个整数只能包含整数。结果是整数向下舍入为零。
答案 0 :(得分:1)
x和y定义为整数值。积分除法仅返回商。因此,如果x小于y,那么x / y将等于0.
因此,最好将( x /y ) * 100
替换为( 100 * x ) / y
否则使用浮点数
例如
( double )x / y * 100
答案 1 :(得分:0)
将int更改为double应解决问题,但也“使用命名空间std;”我编程时总是在主要之外。我不知道这是否会影响任何事情,但您可能会考虑将其置于主函数之上,因为它可能导致现在出现问题,或者可能导致您制作的另一个程序出现问题。我认为这是全局或私有的问题但是我会把它放在main之外,这样你使用的任何其他函数都可以使用它(假设我是对的)。
答案 2 :(得分:0)
如果除以两个整数,结果将是一个整数(商:余数被丢弃)。
所以,1 / 2 -> 0
代替0.5
。
另请注意,(1 / 2) * 100
因此0 * 100 -> 0
,而弗拉德说,
100*1/2 -> 100/2 -> 50
,这就是你想要的。