C ++警告C4244'return':从'double'转换为'int',可能丢失数据Visual Studio 2015

时间:2016-01-11 05:50:13

标签: c++ visual-c++

C ++新手,遵循教程并尝试对其进行扩展。我的程序编译,但我收到错误“警告C4244:'返回':从'double'转换为'int',可能会丢失数据”第23行: 编译时end: return(n1);表示我的计算器结果不正确,忽略小数位并将所有内容视为整数。除了我专门使用的1之外,我在我的代码中找不到任何实例。根本不应该转换双打。任何人都可以看看,让我知道我哪里出错了?我试图将当前的int转换为double,并且还使用其他各种格式样式无效。

#include "stdafx.h"
#include <iostream>
#include <cstdint>

using namespace std;

int getNumber(int16_t x)
{
    double n1{};

    if (x == 1)
    {
        cout << "First number: ";
        cin >> n1;
        goto end;
    }
    else if (x == 2)
    {
        cout << "Second number: ";
        cin >> n1;
        goto end;
    }
        end: return(n1);
}

int getOperator()
{
    char op{};
    cout << "Operator (+, -, *, /): ";
    cin >> op;

    return(op);
}

void printAnswer(double n1, char op, double n2)
{
    if (op == '+')
        cout << n1 << " + " << n2 << " = " << (n1 + n2) << '\n';
    else if (op == '-')
        cout << n1 << " - " << n2 << " = " << (n1 - n2) << '\n';
    else if (op == '*')
        cout << n1 << " * " << n2 << " = " << (n1 * n2) << '\n';
    else if (op == '/')
        cout << n1 << " / " << n2 << " = " << (n1 / n2) << '\n';    
}

int main()
{
    cout << "Please enter two numbers and an operator to perform a calculation." << endl;

    double n1(getNumber(1));
    char op(getOperator());
    double n2(getNumber(2));

    printAnswer(n1, op, n2);

    return(0);
}

1 个答案:

答案 0 :(得分:2)

警告信息非常清楚。在您定义的函数中,返回类型为int

    int getNumber(int16_t x)
 // ^^^

当你实际将double类型传递给return语句时。

要摆脱警告修复函数返回类型:

    double getNumber(int16_t x)
 // ^^^^^^

作为旁注:请不要使用goto,尤其是如果它完全是多余的话。无论如何,所有代码路径都直接导致标签end: