重用"rechnung()"即使它不应该

reuses "rechnung()" even though it shouldn't

本文关键字:不应该 rechnung 重用      更新时间:2023-10-16
#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;
}

这是我在一个实现文件中的代码。我的问题是,主程序总是循环整个"rechung()"函数,即使我没有在控制台中键入"Y"。一开始,当我键入除"Y"之外的其他内容时,控制台会关闭(应该关闭),但如果我进行计算,键入"Y),再进行一次计算,然后键入"k",例如,它也从"rechungg()"的开头开始。为什么会这样?我的意思是,我告诉他,只有当输入的字符是"Y"时,他才会回忆起"rechung()"。

考虑一下这个可能更简单的例子:

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

在循环中,again的值永远不会改变,因此存在一个无限循环。然而,您的代码通过递归调用函数更进一步。高度简化的

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

即CCD_ 2一次又一次地呼叫自己并且从未返回。你把环放错地方了。你可以这样写

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