重用"rechnung()"即使它不应该
reuses "rechnung()" even though it shouldn't
#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;
}
}
相关文章:
- 条件断点在不应该触发时触发
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 为什么我不应该把所有东西都放在标题中?
- 找不到 QRegularExpression 行为的任何解释。它有效,但不应该
- 在清除 istream 之前,我不应该需要取消获取它吗?
- c++ 为什么我不应该从不同的线程解锁互斥锁
- "typename"不应该只在模板函数或模板类中使用吗?
- 为不应该获得未定义行为的内容获取未定义的行为
- 两种情况下的输出不应该相同吗?
- 默认情况下,"std::shared_ptr"不应该使用"std::d efault_delete"吗?
- 错误代码 E0065 和 E0169 不应该有
- 矢量的值在不应该更改时更改
- 保证复制省略不应该适用吗?
- 不应该禁止访问私有类型吗?
- 使用匿名命名空间中的函数或另一个文件中的静态函数不应该出错吗?
- NRVO不应该保证局部命名变量和调用站点变量采用相同的地址吗?
- 类的私有成员在我的类实例化期间更改,即使他们不应该
- 为什么'system'不应该在 Windows 特定的应用程序中使用
- 正则表达式在我认为不应该在 c++ 中采用等号
- 重用"rechnung()"即使它不应该