我刚开始使用C ++并想对计算器进行编程,但是我的逻辑在某些地方是错误的

时间:2019-02-12 08:25:04

标签: c++ visual-c++

当我运行代码时,它会在输入第二个数字后停止。我敢肯定,我在某个地方有逻辑错误,但似乎找不到。这也是我第一次尝试使用函数,也许我在那里做错了什么?

这是我的代码:

#include <iostream>

using namespace std;

/*Variables*/
double d_Zahl1 = 0.0;
double d_Zahl2 = 0.0;
double d_Ergebnis = 0.0;
char c_Operator = ' ';

/*Functions*/
double add(double d_Zahl1, double d_Zahl2)
{
    d_Ergebnis = d_Zahl1 + d_Zahl2;
    return d_Ergebnis;
    /*Output of result*/
    cout << "\n\n\n" << d_Zahl1 << c_Operator << d_Zahl2 << '=' << d_Ergebnis;
};

double substract(double d_Zahl1, double d_Zahl2)
{
    d_Ergebnis = d_Zahl1 - d_Zahl2;
    return d_Ergebnis;
    /*Output of result*/
    cout << "\n\n\n" << d_Zahl1 << c_Operator << d_Zahl2 << '=' << d_Ergebnis;
};

double divide(double d_Zahl1, double d_Zahl2)
{
    d_Ergebnis = d_Zahl1 / d_Zahl2;
    return d_Ergebnis;
    /*Output of result*/
    cout << "\n\n\n" << d_Zahl1 << c_Operator << d_Zahl2 << '=' << d_Ergebnis;
};

double multiply(double d_Zahl1, double d_Zahl2)
{
    d_Ergebnis = d_Zahl1 / d_Zahl2;
    return d_Ergebnis;
    /*Output of result*/
    cout << "\n\n\n" << d_Zahl1 << c_Operator << d_Zahl2 << '=' << d_Ergebnis;
};


/*Main function*/
int main()
{
    /*Output of head*/
    cout << "\t----------Calculator----------\n\n";



    /*Input of 1. number*/
    /*checking if the input is a number*/
    while (cout << "\n\nPlease enter your first number: " && !(cin >> d_Zahl1))
    {
        cout << "\nThat's not a valid input. Try again. " << endl;
        cin.clear();
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
    }

    /*Einlesen des Operanden*/
    cout << "\nPlease enter your operator (+,-,*,/): ";

    do {                                //Fehler durch do-while Schleife abfangen

        cin >> c_Operator;

        switch (c_Operator) {

        case '+':
            /*Eingabeaufforderung für zweite Zahl*/
            cout << "\nPlease enter your second number: ";

            /*Einlesen der 2. Zahl*/
            cin >> d_Zahl2;

            add(d_Zahl1, d_Zahl2);
            break;
        case '-':
            /*Eingabeaufforderung für zweite Zahl*/
            cout << "Please enter your second number: ";

            /*Einlesen der 2. Zahl*/
            cin >> d_Zahl2;

            substract(d_Zahl1, d_Zahl2);
            break;
        case '*':
            /*Eingabeaufforderung für zweite Zahl*/
            cout << "Please enter your second number: ";

            /*Einlesen der 2. Zahl*/
            cin >> d_Zahl2;

            multiply(d_Zahl1, d_Zahl2);
            break;
        case '/':
            /*Eingabeaufforderung für zweite Zahl*/
            cout << "Please enter your second number: ";

            /*Einlesen der 2. Zahl*/
            cin >> d_Zahl2;

            divide(d_Zahl1, d_Zahl2);
            break;
        default:
            cout << "-----Wrong input!-----\n\n\n\n\n\n\n\n\nPlease enter your operator (+,-,*,/): ";
        }
    } while (c_Operator != '+' || c_Operator != '-' || c_Operator != '*' || c_Operator != '/'); /*Solange keines der Rechenzeichen --> repeat*/



    system("pause");
    return 0;
}

我希望它像这样:

  

输入1.数字:5

     

输入操作员:+

     

输入2。数字:5

     

5 + 5 = 10

但现在它只是:

  

输入1.数字:5

     

输入操作员:+

     

输入2。数字:5

2 个答案:

答案 0 :(得分:2)

@ PanthersFan92已经提到了您的错误,但是我想在您的代码中给出一些可以做得更好的提示。还有一些缺陷。

首先using namespace std;并不是一个好习惯。您可以阅读here原因。

函数最后不需要分号。  同样,您的函数只是产生输出,因此不需要返回数字。由于您已将d_Zahl1d_Zahl2设置为全局变量,因此无需将它们作为参数传递。

如此

double add(double d_Zahl1, double d_Zahl2){...};

成为

void add(){...}

您正在写:

cout << "\n\n\n" << d_Zahl1 << c_Operator << d_Zahl2 << '=' << d_Ergebnis;

4次。您可以将其放入函数中:

void print_result(double d_Ergebnis) {
    std::cout << "\n\n\n" << d_Zahl1 << ' ' << c_Operator << ' ' << d_Zahl2 << " = " << d_Ergebnis << '\n';
}

(您最后也错过了'\n')。

do {...} while (c_Operator != '+' || c_Operator != '-' || c_Operator != '*' || c_Operator != '/');

很难看。改为:

bool done = false
while (!done){
    done = true
    switch (){
        ...
        default: done = false
    }
}

system("pause")可能是这里最邪恶的地方。不惜一切代价避免。您可以阅读here原因。请记住,加载所有windows(!)指令会增加大量的开销。 而是使用类似以下内容的

void system_pause() {
        std::cout << "press enter to continue . . . ";
        if (!std::cin.good()) {
            std::cin.clear();
        }
        else {
            std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        }
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }

,然后在需要时致电system_pause()。还有一些事情:

  • 您的multiply函数是除法而不是乘法。

  • 您正在用"Input second number"等重复很多次。-您也可以将其放入函数中。

  • 使用时需要#include <limits>

  • 尝试避免使用std::endl-始终使用'\n'

完整代码:

#include <iostream>
#include <limits>

double d_Zahl1 = 0.0;
double d_Zahl2 = 0.0;
double d_Ergebnis = 0.0;
char c_Operator = ' ';

void system_pause() {
    std::cout << "Press enter to continue . . . ";
    std::cin.clear();
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}


void print_result(double d_Ergebnis) {
    std::cout << "\n\n\n" << d_Zahl1 << ' ' << c_Operator << ' ' << d_Zahl2 << " = " << d_Ergebnis << '\n';
}



void add(){
    d_Ergebnis = d_Zahl1 + d_Zahl2;
    print_result(d_Ergebnis);
}

void substract(){
    d_Ergebnis = d_Zahl1 - d_Zahl2;
    print_result(d_Ergebnis);
}

void divide(){
    d_Ergebnis = d_Zahl1 / d_Zahl2;
    print_result(d_Ergebnis);
}

void multiply(){
    d_Ergebnis = d_Zahl1 * d_Zahl2;
    print_result(d_Ergebnis);
}



void input_first_number() {
    while (std::cout << "Please enter your first number: " && !(std::cin >> d_Zahl1)) {
        std::cout << "That's not a valid input. Try again.\n";
        system_pause();
        std::cout << '\n';
    }
}
void input_second_number() {
    while (std::cout << "Please enter your second number: " && !(std::cin >> d_Zahl2)) {
        std::cout << "That's not a valid input. Try again.\n";
        system_pause();
        std::cout << '\n';
    }
}


int main(){
    std::cout << "\t----------Calculator----------\n\n";

    input_first_number();

    std::cout << "Please enter your operator (+,-,*,/): ";

    bool done = false;
    while (!done){

        std::cin >> c_Operator;

        done = true;
        switch (c_Operator) {
        case '+':
            input_second_number();
            add();
            break;
        case '-':
            input_second_number();
            substract();
            break;
        case '*':
            input_second_number();
            multiply();
            break;
        case '/':
            input_second_number();
            divide();
            break;
        default:
            std::cout << "-----Wrong input!-----\n\nPlease enter your operator (+,-,*,/): ";
            done = false; //repeat if wrong input
        }
    }

    system_pause();
    return 0;
}

示例运行:

        ----------Calculator----------

Please enter your first number: 2938
Please enter your operator (+,-,*,/): /
Please enter your second number: 193



2938 / 193 = 15.2228
Press enter to continue . . .

输入错误:

        ----------Calculator----------

Please enter your first number: a
That's not a valid input. Try again.
Press enter to continue . . .

Please enter your first number: 123
Please enter your operator (+,-,*,/): a
-----Wrong input!-----

Please enter your operator (+,-,*,/): *
Please enter your second number: 678



123 * 678 = 83394
Press enter to continue . . .

答案 1 :(得分:1)

d_Ergebnis = d_Zahl1 + d_Zahl2;
return d_Ergebnis;
/*Output of result*/

这是您的问题。 “返回”下的所有内容均不执行。 'return'语句结束该功能。