我的代码中的return语句丢失了准确性

时间:2014-09-22 05:07:05

标签: c++ return

我通过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;
}

2 个答案:

答案 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 intdouble。这导致以下行为:

  
      
  • 浮点类型的prvalue可以转换为任何整数类型的prvalue。小数部分被截断,即   小数部分被丢弃。 [...]
  •   

您所要做的就是将函数的返回值修改为int而不是double input(float); double math(double, double, char); double input(float x) { //... } double math(double x, double y, char op) { //... }

{{1}}