2014-03-12 86 views
0

我给下面的C++如果声明或文本文件

Basepay = 800; Job_class = 2; Ed = 3; 
Basepay = 800; Job_class = 3; Ed = 1; 

现在对于这个方案,Job_class和Ed是1-3。如果Job_class为1,则向支付宝添加10%。如果是2,则将15%加入支付宝。如果是3,则将20%加入支付宝。 对于教育,如果Ed为1,则向支付宝添加5%,如果是2则添加10%,如果是3则添加15%。

我已经输入了数据。我的问题是:在if语句中这样做会更容易吗,还是通过文本文件更容易?

另外,有人可以给我看一个例子吗?我通常会做以下

cout << "Please enter a Job Class" 
cin >> Job_class 
if (Job_class == 1) 
    basepay = basepay + basepay*.10; 

这看起来是否正确?

+0

有很多方法可以做到这一点,你的方式很好,如果这是你想要做到这一点。一些可能的方法是:如果语句,切换案例,地图等 – CoryKramer

+0

我不确定我有你的问题,但是,这看起来很好。 – keyser

+0

小心那些括号/圆括号...... – CoryKramer

回答

0

您可以完全避免if陈述。

Basepay = Basepay + (0.05 * Basepay) 
      + (Job_Class * 0.05 * Basepay) + (Ed * 0.05 * Basepay); 

相当于

​​

这也等于

Basepay += (0.05 * Basepay) * (Job_Class + Ed); 

现在,我不是100%肯定的,如果我的数学是正确的,但我想说的 - 如果有办法想出一个公式,它通常比if陈述更好。不是像这样的简单程序,但是在大型复杂应用程序中,它可能为您节省大量处理器时间。

+0

“它可以为您节省大量的处理器时间。” - >让它工作,把它做好。如果性能很慢,请找出什么是缓慢的,并解决这个问题。正确且易于阅读应该是第一要务。 – crashmstr

+0

如果我是一个巨魔,我会指出,你实际上会节省管道摊位......好东西,我不是一个巨魔。 – bolov

+0

虽然我会如何避免if语句。例如,在一个实例中,Job_class将添加5%的利息。另一方面,根据投入的分类,可能需要增加10%的利息。 – user3404737

1

在这种情况下使用开关会更好。例如

 switch(Job_class) 
    { 
     case 1 : basepay = basepay + basepay *.10; 
       break; 

     case 2 : basepay = basepay + basepay *.15; 
       break; 

     case 3 : basepay = basepay + basepay *.20; 
       break; 
    }  
+0

程序如何知道为Job_class输入了什么? – user3404737

+0

@ user3404737此解决方案仅替换'if'语句,而不是整个代码。 – Saraph

+0

用户将输入Job_Class作为输入,同样可以在开关中使用。 – Dipika

0

如果我理解正确你的问题,你想知道,如果它是更好地从一个文本文件中读取“作业类”或者提示用户输入,是这样吗?我认为这取决于你的应用程序的性质,如果你的应用程序是一个交互式应用程序,提示用户输入是最好的方式,但如果你的应用程序不是一个交互式应用程序,那么我会说你的选择应该由您的应用将处理的“作业类别”输入的数量 - 如果您处理的是100个输入,则输入它们将是单调乏味的,从文件中读取这些输入将是最好的方法。

代码方面,提示用户输入并读取用户响应的代码看起来不错,但容易出错,如果用户输入无效“作业类别”表示用户输入浮点数或者你的代码行为的一堆字符将是未定义的。相反的CIN,可以考虑使用函数getline()读取输入作为一个字符串,然后喂字符串istringstream然后提取你正在寻找从istringstream对象

int getJobClass() 
{ 
    int Job_Class; 
    string input; 
    bool inputValid = false; 
    while(!inputValid) 
    { 
     cout << "Please Enter Job Class"; 
     getline(cin, input); 
     istringstream inputParser(input); 
     if (!(inputParser >> Job_Class)) 
     { 
     cout << "Invalid Job Class Input!" <<endl; 
     inputValid = false; 
     } 
     else 
     { 
     inputValid = true; 
     } 
    } 
    return Job_Class; 
} 

一旦上述就位的输入,计算“基本工资”,你可以做这样的事情:

float getPayMultiplier(int Job_class) 
{ 
    float multiplier = 1; 
    switch (Job_class) 
    { 
    case 1: 
     multiplier = 0.10; 
     break; 
    case 2: 
     multiplier = 0.15; 
     break; 
    case 3: 
     multiplier = 0.20; 
     break; 
    default: 
     cout << "Invalid Job_Class" << endl; 
     break; 
    } 
    return multiplier; 
} 

float computeBasePay(float pay) 
{ 
    return pay + (pay * getPayMultiplier(getJobClass())); 
} 
0

@ user3404737:你为什么想避免if?代码中的逻辑是有条件的:基本工资(或更确切地说是薪酬乘数)由工作类别决定。鉴于此,您为什么要避免使用if条件?

如果你担心代码面色差了太多的条件语句,使用switch...case如果您的应用将有“工作类”分类100S(其中,我怀疑你会),那么我建议你构建一个map<int, float>在您键是“作业类”,值是“工资乘数”,这样您可以在计算基本工资时快速查找,而不是运行100个条件。