我是C++的新手,在完成一项任务时遇到了困难。我需要将这个if语句转换为switch语句,但我完全不知道如何做到这一点,因为数字必须是整数。有人能给我指正确的方向吗?
见下文:
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
//declare named constants and variables
const double RATE1 = .02;
const double RATE2 = .05;
double sales = 0.0;
double commission = 0.0;
//get input item
cout << "Enter the sales amount: ";
cin >> sales;
//calculate commission
if (sales <= 15000.0)
{
commission = sales * RATE1;
else
commission = sales * RATE2;
}
//end if
//display commission
cout << fixed << setprecision(2);
cout << "Commission: $" << commission << endl;
system("pause");
return 0;
} //end of main function
这是不可能做到的。switch
需要积分相等,您的代码会检查是否小于双数。
不可行的选择是将双精度转换为丢失精度的整数,然后将所有15000个选项列为大小写标签。根本不可行。
如果使用gcc,则可以使用大小写范围:大小写范围,但这适用于IMHO的整数数据类型,我不确定是否使用双精度。
但别忘了,这只是编译器的扩展。我也听说C++11中引入了类似的东西,但我不确定。
从技术上讲,你可以用这种可怕的方式:
//calculate commission
switch (sales <= 15000.0)
{
case true:
commission = sales * RATE1;
break;
default:
commission = sales * RATE2;
}
但是,永远不要在真实代码中这样做。
如果它绝对需要一个switch语句,那么我们可以作弊,并有一个返回true或false的函数,然后打开该函数的结果
bool is_less(double amount)
{
return amount < 15000.0;
}
//...
switch (is_less(sales))
{
case true: commission = sales * RATE1; break;
case false: commission = sales * RATE2; break;
}
您可以在不使用新函数的情况下执行类似于NathanOliver的答案的操作。
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
//declare named constants and variables
const double RATE1 = .02;
const double RATE2 = .05;
double sales = 0.0;
double commission = 0.0;
//get input item
cout << "Enter the sales amount: ";
cin >> sales;
//calculate commission
bool lessthan = sales <= 15000.0;
switch (lessthan)
{
case true:
commission = sales * RATE1;
break;
case false:
commission = sales * RATE2;
break;
default:
break;
}
//display commission
cout << fixed << setprecision(2);
cout << "Commission: $" << commission << endl;
system("pause");
return 0;
} //end of main function`