2016-01-11 150 views
0

C++新手,遵循教程並嘗試擴展它。我的程序編譯但我收到錯誤「警告C4244:'返回':從'double'轉換爲'int',可能丟失數據」在第23行: end: return(n1);編譯時意味着我的計算器結果不正確,忽略十進制把所有東西都當作一個整數來處理。除了我特別使用的1之外,我在我的int代碼中找不到任何實例。沒有雙打應該轉換。任何人都可以請看看,讓我知道我錯了什麼地方?我試圖將當前的int變成double,並且還使用各種其他格式化樣式無濟於事。C++警告C4244'return':從'double'轉換爲'int',可能會丟失數據Visual Studio 2015

#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

你的'getNumber'函數返回一個'int',但你給它一個'double'。將'double'分配給'int'會發生什麼?您可能會丟失數據。如果將'45.23'分配給'int',則只能得到'45'。 '0.23'將會丟失。而且,「goto」完全不需要。 – DeiDei

+0

goto's總是在那裏時有什麼意義呢? –

回答

2

警告信息非常清晰。在功能您已經定義,讓您的數字返回類型爲int

int getNumber(int16_t x) 
// ^^^ 

,而你實際上傳遞double類型return語句。

爲了擺脫警告的固定函數的返回類型:

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

作爲一個方面說明:請不要使用goto,尤其不能當它是完全多餘的。無論如何,你所有的代碼路徑直接導致標籤end:

相關問題