创建开关语句时出现问题



我是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;
}

但是,永远不要在真实代码中这样做。

正如SergeyA在回答中指出的那样,这是可行的,因为这是一个巨大的案例范围。

如果它绝对需要一个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`

最新更新