当我运行代码时,它会在输入第二个数字后停止。我敢肯定,我在某个地方有逻辑错误,但似乎找不到。这也是我第一次尝试使用函数,也许我在那里做错了什么?
这是我的代码:
#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
答案 0 :(得分:2)
@ PanthersFan92已经提到了您的错误,但是我想在您的代码中给出一些可以做得更好的提示。还有一些缺陷。
首先using namespace std;
并不是一个好习惯。您可以阅读here原因。
函数最后不需要分号。
同样,您的函数只是产生输出,因此不需要返回数字。由于您已将d_Zahl1
和d_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'语句结束该功能。