2017-09-22 45 views
-3

該值從0開始,然後可以使用數學的任何操作數進行計算。代碼編譯成功,但不起作用。終端窗口顯示「中止」,「重試」和「取消」。規則是你不能使用2個操作數,只是繼續添加前一個數字來表示操作數。在C++中沒有2個操作數的數學計算器

#include <iostream> 
#include <cmath> 

using namespace std; 

void Input(double input); 

int main() 
{ 
    double sign, input; 

    cout << "This program calculates any given number upto 1 decimal place using the following operators:" << endl; 
    cout << " '+' - Addition." << endl; 
    cout << " '-' - Subtraction" << endl; 
    cout << " '*' - Multiplication." << endl; 
    cout << " '^' - Root." << endl; 
    cout << " '/' - Division." << endl; 

    Input(input); 

    return 0; 
} 

void Input(double IN) 
{ 
    char q; 
    char sign; 
    int Val = 0.0; 

    cin >> sign >> IN; 

    while (IN != q) 
    { 

     if (sign = '-') 
      Val -= IN; 
     if (sign = '+') 
      Val += IN; 
     if (sign = '*') 
      Val *= IN; 
     if (sign = '/') 
      Val /= IN; 

     cout << endl << "Result so far is " << IN; 

     IN++; 
    } 
} 
+0

強烈建議您明確指出是什麼給您帶來麻煩。我可以在代碼中看到一個可能成爲問題的重複錯誤,但我寧願有固定的門柱。 – user4581301

+0

該程序不起作用,我想根據哪個操作符號提供來計算數字。 – Snehil

+0

它不起作用?什麼行/表達?它做什麼而不是你想要它做什麼? – user4581301

回答

0

你的主要問題是

  1. q是不確定的,因此while(IN != q)將在C++成爲不確定的行爲
  2. ,對於任何原始數據類型=意味着賦值運算符,而不是比較操作。改爲使用==進行比較。
  3. Val是一個帶有int數據類型的變量,但賦值爲0.0,它是一個float或double。

你的程序在做什麼,如果語句是:(例如本if聲明)

if (sign = '-')

  1. 程序分配的-的值,它是45sign變量
  2. if聲明檢查變量sign的價值0
    • 如果該值爲0則認爲false的聲明,該塊被跳過
    • 如果該值不爲0則認爲true的發言,並進入塊
  3. 該程序運行if塊內的代碼

程序做所有這些事情3,每if聲明在你的代碼,很少和我跑我自己的代碼中Windows,所以我不能很確定爲什麼程序給予Run-Time Check Failure #3-T錯誤

的一點小建議,使用switch無論何時您需要使用多個if聲明,因爲它更易於閱讀。

+0

值得一編,以增加'Val'是一個整數並且正在丟棄任何計算的分數,並且'IN'完成任何參數。 – user4581301

+0

「運行時檢查失敗#3-T」幾乎可以肯定當'input'在'main'中未初始化時使用'input'或'Input'中未初始化'q'時,Visual Studio會停止程序。 – user4581301

+0

@ user4581301感謝提醒,我怎麼能忽略這樣一個簡單的數據類型錯誤。但是'Val'作爲一個整數並被賦予'/ ='並不是我最關心的問題,因爲我不完全明白程序的初衷是什麼,我只是指出了一些容易錯過的錯誤,使用'IN'作爲函數參數而沒有任何真實的參數也不是什麼大問題,因爲它更多的是關於「如何編寫正確的代碼」而不是「如何編寫一個工作代碼」(因爲有時候我使用一次性參數來選擇哪個函數重載)。 – PaprikaAndPepper