我通过http://www.learncpp.com/cpp-tutorial/210-comprehensive-quiz的精彩教程学习C ++作为测验的一部分,我需要创建一个计算器,但代码似乎总是会丢弃小数。我相信这发生在return语句中。无论如何,非常感谢任何帮助新手学习C ++。我的代码:
#include "stdafx.h"
#include <iostream>
int input(float);
int math(double, double, char);
void print(double);
int _tmain(int argc, _TCHAR* argv[])
{
double fNumberOne = input(0);
double fNumberTwo = input(1);
char Operator = input(2);
print(math(fNumberOne, fNumberTwo, Operator));
return 0;
}
int input(float x)
{
using namespace std;
if (x == 0)
{
cout << "Please enter the first number" << endl;
double input;
cin >> input;
return input;
}
if (x == 1)
{
cout << "Please enter the second number" << endl;
double input;
cin >> input;
return input;
}
if (x == 2)
{
cout << "Please enter the operator" << endl;
char op;
cin >> op;
return op;
}
}
int math(double x, double y, char op)
{
double result(0);
if (op == '+')
result = x + y;
if (op == '-')
result = x - y;
if (op == '/')
result = x / y;
if (op == 'x')
result = x *y;
return result;
}
void print(double x)
{
using namespace std;
cout << x << endl;
}
答案 0 :(得分:3)
当您从函数input
返回时,您将返回int
:
int input(float x)
{
...
double input;
cin >> input;
return input; // A cast happens here to turn the double into an int.
您需要返回一个双重double input(float x)
。
答案 1 :(得分:1)
请注意,double
int
为double
。这导致以下行为:
- 浮点类型的prvalue可以转换为任何整数类型的prvalue。小数部分被截断,即 小数部分被丢弃。 [...]
您所要做的就是将函数的返回值修改为int
而不是double input(float);
double math(double, double, char);
double input(float x)
{
//...
}
double math(double x, double y, char op)
{
//...
}
。
{{1}}