无法创建switch语句

时间:2016-01-13 15:48:46

标签: c++

我是C ++的新手,我在完成作业时遇到了麻烦。我需要将这个if语句切换到switch语句,但由于数字必须是整数,我完全迷失了。有人能指出我正确的方向吗?

见下文:

import numpy as np
import pandas as pd
fname = 'TheBigBangTheory.Season01.Episode01.speakername'
s_name  = []
p_name  = []
with open('%s.ctm'%fname, 'r') as f:
    for line in f:
        colum = line.split(' ')
        colum = [col.strip() for col in colum]
        nsn = colum[7]
        npn = colum[9]
        s_name.append(nsn)
        p_name.append(npn)

Np = sorted (np.unique(p_name))
Np.remove('"')
Ns = sorted (np.unique(s_name))
print(Np)
print(Ns)
A = np.zeros((len(Ns),len(Np)))
print(A) 

5 个答案:

答案 0 :(得分:3)

这是不可行的。 switch需要完整的相等性,您的代码检查的次数小于双数。

不可行的选项是将double转换为精度丢失的整数,并将所有15000个选项列为case标签。根本不可行。

答案 1 :(得分:1)

如果您使用gcc,那么您可以使用案例范围:Case Ranges,但这对于整数数据类型适用于IMHO,我不确定双打。

但不要忘记,这只是编译器的扩展。我也听说类似的东西是用C ++ 11引入的,但我不确定那里。

答案 2 :(得分:1)

从技术上讲,你可以用这种可怕的方式做到这一点:

//calculate commission
switch (sales <= 15000.0)
{
case true: 
    commission = sales * RATE1;
    break;
default:
    commission = sales * RATE2;
}

但永远不会,永远在实际代码中执行此操作。

答案 3 :(得分:0)

SergeyAhis answer中指出,这是可行的,因为它涉及的范围很广。

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

答案 4 :(得分:-2)

你可以这样做,类似于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`