#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()”。
答案 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;
}
}