2013-04-17 7 views
1

Я уже начал C++ сегодня, и я работаю над калькулятором Advanced Text. В любом случае, я работаю над показателями, но когда я запускаю свою программу и вводю строку, которая запускает режим Exponent, она не переходит в режим отсрочки, а только в режим обычного калькулятора. Вот мой код:Не обнаруживать вход должным образом

// 
// main.cpp 
// C++ Calculator 
// This is just a basic Calculator Application to be run through the command line. 
// v.0.02 - Second version of calculator, basic text, command line interface, loop. 
// Created by Johnny Carveth on 2013-04-17. 
// Copyright (c) 2013 Johnny Carveth. All rights reserved. 
// 
#include <math.h> 
#include <iostream> 
int int1, int2, answer; 
bool bValue(true); 
std::string oper; 
std::string cont; 
using namespace std; 
std::string typeOfMath; 
double a; 
double b; 
int answerExponent; 


int main(int argc, const char * argv[]) 
{ 

    // Taking user input, the first number of the calculator, the operator, and second number. Addition, Substraction, Multiplication, Division 
    cout<<"______________________________________________\n"; 
    cout<<"|Welcome to The ExpCalc! Do you want to do |\n"; 
    cout<<"|Exponent Math, or Basic Math(+, -, X, %) |\n"; 
    cout<<"|Type in 'B' for basic Math, and'E' for  |\n"; 
    cout<<"|Exponential Math! Enjoy! (C) John L. Carveth|\n"; 
    cout<<"|____________________________________________|\n"; 
    cin>> typeOfMath; 
    if(typeOfMath == "Basic" || "basic" || "b" || "B") 
    { 
     cout << "Hello! Please Type in your first integer!\n"; 
     cin>> int1; 
     cout<<"Great! Now Enter your Operation: ex. *, /, +, -...\n"; 
     cin>> oper; 
     cout<<"Now all we need is the last int!\n"; 
     cin>> int2; 

     if (oper == "+") { 
      answer = int1 + int2; 
     } 
     if (oper == "-") { 
      answer = int1 - int2; 

     }if (oper == "*") { 
      answer = int1 * int2; 
     }if (oper == "/") { 
      answer = int1/int2; 
     } 
     cout<<answer << "\n"; 
     cout<<"Thanks for Using The ExpCalc!\n"; 

    }else if(typeOfMath == "Exp" || "E" || "e" || "Exponent"){ 
     cout<<"Enter the desired Base. Example: 2^3, where 2 is the base.\n"; 
     cin>> a; 
     cout<<"Now what is the desired exponent/power of the base? Ex. 2^3 where 3 is the exponent!\n"; 
     cin>>b; 
     answerExponent = double (pow(a,b)); 
    } else(cout<<"Wrong String!"); 
} 

Полезные советы, помните, что это мой первый день с C++. Также, если это поможет, я использую XCode 4!

+0

Несколько других советов, не имеющих отношения к вашей проблеме (которая уже адекватно ответили): выберите [стиль распорки] (HTTP://en.wikipedia.org/wiki/Indent_style) и придерживаться его последовательно; предпочитайте 'std :: cout' (или, возможно,' using std :: cout') через 'using namespace std'; избегать глобальных привязок, если абсолютно не обязательно (все, что вы объявили перед «main», является глобальным); и, наконец, имейте в виду, что 'int/int2' выполняет * целочисленное деление *, что может дать неожиданные результаты (он усекает что-либо после десятичной точки, а не округляет). – JBentley

ответ

4

Вы можете посмотреть на свой, если выражение

if(typeOfMath == "Basic" || "basic" || "b" || "B")

Каждая вещь между || оценивается как условное. Так что попробовать что-то вроде:

if(typeOfMath == "Basic" || 
    typeOfMath == "basic" || 
    typeOfMath == "b" || 
    typeOfMath =="B") { 
// do basic 

делают ту же модификацию для else if(typeOfMath == "Exp" || "E" || "e" || "Exponent")

+0

БОЛЬШОЙ ответ исправил мою проблему. Но теперь, когда оно выполняет уравнение для показателей, я получаю ошибку (lldb). Любая подсказка? –

+0

@DtrollMC Возможно, это потому, что 'answerExponent' является' int', и вы пытаетесь присвоить 'double'? – MysticXG

+0

@DtrollMC Измените 'answerExponent = double (pow (a, b));' to answer.Exponent = static_cast (pow (a, b)) ;, но имейте в виду, что вы потеряете все цифры после десятичной точки (где это применимо), потому что вы вызываете функцию на 'double', но сохраняете результат в 'int'. Для получения более точных результатов объявите 'answerExponent' как' double' и выполните 'answerExponent = pow (a, b);' – JBentley

Смежные вопросы