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);
}
答案 0 :(得分:2)
警告信息非常清楚。在您定义的函数中,返回类型为int
int getNumber(int16_t x)
// ^^^
当你实际将double
类型传递给return语句时。
要摆脱警告修复函数返回类型:
double getNumber(int16_t x)
// ^^^^^^
作为旁注:请不要使用goto
,尤其是如果它完全是多余的话。无论如何,所有代码路径都直接导致标签end:
。