2017-09-22 109 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