重用“ rechnung()”,即使它不应该

时间:2019-02-01 22:13:23

标签: c++ function while-loop implementation

#include <iostream>
#include "funktionen.h"

using namespace std;

int rechnung()
{
    cout  << "Please choose the operator you want to calculate with" << endl;
    int eingabe1;
    int eingabe2;
    int eingabe;
    int dummy;
    char zeichen;
    char again;
    cin >> zeichen;
    cout << endl << "1. Eingabe: ";
    cin >> eingabe1;
    cout << endl << "2. Eingabe: ";
    cin >> eingabe2;
    switch (zeichen)
    {
    case '+':
        eingabe=eingabe1 + eingabe2;
        break;
    case '-':
        eingabe=eingabe1 - eingabe2;
        break;
    case '*':
        eingabe=eingabe1 * eingabe2;
        break;
    case '/':
        eingabe=eingabe1 / eingabe2;
        break;
    }

    cout << endl << "Das Ergebnis ist | " << eingabe << " | " << endl << endl;
    cout << "Wanna calculate again? ";
    cin >> again;
    while(again=='Y')
    {
        rechnung();
    }
    return 0;
}

这是我在实现文件中的代码。我的问题是,即使我没有在控制台中键入“ Y”,主程序也总是循环整个“ rechnung()”函数。首先,当我键入“ Y”以外的其他内容时,控制台将关闭(应如此),但是如果我进行计算,请键入“ Y”,再进行一次计算并键入“ k”,例如,它也从“ rechnung()”的开头。为什么这样做呢?我的意思是我告诉他,如果字符输入为“ Y”,他将只记得“ rechnung()”。

1 个答案:

答案 0 :(得分:1)

考虑以下可能更简单的示例:

void foo() {}
void bar() {
    char again;
    // ... do something
    std::cin >> again;
    while(again=='Y') {
        foo();
    }
}

在循环内部,again的值永远不会改变,因此存在无限循环。然而,你的代码更进了一步通过递归调用函数。非常简化,您可以:

void bar() {
   // .. do something
   while (true) {
       bar();
   }
}

ie bar一次又一次地调用自己,并且永不返回。您将循环放在错误的位置。你可以这样写

void bar() {
    char again = 'Y';
    while (again == 'Y') {
        // .. do something
        std::cout << "repeat?";
        std::cin >> again;
    }
}