【发布时间】:2020-09-16 13:31:54
【问题描述】:
我已经编写了这个程序,它应该打印 INFINITY 如果除以 0 例如根据代码 0/0 = infinity 因此输出不符合我的预期。我的代码有问题吗?还是我需要换一种方式?
#include <iostream>
using namespace std;
void optionMenu();
void userInput(char);
int main ()
{
optionMenu();
char userResult;
cout << " Choice: ";
cin >> userResult;
userInput(userResult);
return 0;
}
void optionMenu()
{
cout << " Enter your choice" << '\n' ;
cout << " + for Addition" << '\n';
cout << " - for Subtraction" << '\n';
cout << " * for Multiplication" << '\n';
cout << " / for Division" << '\n';
}
void userInput(char userResult)
{
int value1, value2;
switch (userResult)
{
case '+':
cout << " Enter your first Number: "; cin >> value1; cout << " Enter your second number: "; cin >> value2;
cout << " The result for the Entered values is equal to: "; cout << (value1 + value2);
break;
case '-':
cout << " Enter your first Number: "; cin >> value1; cout << " Enter your second number: "; cin >> value2;
cout << " The result for the Entered values is equal to: "; cout << (value1 - value2);
break;
case '*':
cout << " Enter your first Number: "; cin >> value1; cout << " Enter your second number: "; cin >> value2;
cout << " The result for the Entered values is equal to: "; cout << (value1 * value2);
break;
case '/':
if(!(value2))
cout << "INFINITY" << '\n';
else
cout << " Enter your first Number: "; cin >> value1;
cout << " Enter your second number: "; cin >> value2;
cout << " The result for the Entered values is equal to: " << (value1 / value2) << '\n';
break;
default:
cout << " Unidentified or Wrong Input / maybe not allowed! Try again." << '\n';
}
}
【问题讨论】:
-
value2在您到达if(!(value2))行时未初始化 - 因此您的代码会调用 undefined behavior -
else分支就是cout << " Enter your first Number: ";。阅读您最喜欢的 C++ 书籍中的块和花括号。 -
重点是在要求用户输入之前检查了
value2的值。你需要把你的 if 在你输入值之后而不是之前 -
您的代码绝对无效。当 value2 尚未初始化时,这是使用 value2 的未定义行为。
-
@Tahir 移动 if 语句,使其位于
cin >>语句之后。您不能在之前检查该变量的值。该变量具有值。
标签: c++