C++If语句或文本文件

C++ If Statement or Text File

本文关键字:文件 文本 语句 C++If      更新时间:2023-10-16

我给出以下

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;

这看起来正确吗?

在这种情况下最好使用switch。例如

     switch(Job_class)
     {
       case 1 : basepay = basepay + basepay *.10;
                break;
       case 2 : basepay = basepay + basepay *.15;
                break;
       case 3 : basepay = basepay + basepay *.20;
                break;
     }      

您可以完全避免if语句。

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

等于

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

也等于

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

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

如果我正确理解了你的问题,你想知道从文本文件或提示用户输入中读取"作业类"是否更好,是吗?我想说这取决于你的应用程序的性质,如果你的应用是一个交互式应用程序,提示用户输入是最好的方式,但如果你的不是一个交互式的应用程序,那么我想说你的选择应该由你的应用程序将处理的"工作类"输入的数量决定——如果你要处理100个输入,输入它们将是乏味的,从文件中读取这些输入将是最好的方法。

代码方面,提示用户输入并读取用户响应的代码看起来不错,但如果用户输入无效,则很容易出错。"作业类"表示用户输入了一个浮点数,或者一堆字符,则代码的行为将未定义。代替cin,考虑使用getline((将输入读取为字符串,然后将字符串馈送到istringstream,然后从istringsream对象中提取您要查找的输入

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()));
}

@user3404737:为什么要避免if?代码中的逻辑本质上是有条件的:基本工资(或者更准确地说是工资乘数(是由工作类别决定的。既然如此,为什么要避免使用if条件?

如果你担心代码中有太多的条件词,那么就使用switch...case。如果你的应用程序将有100个"工作类"分类(我怀疑你会这样做(,那么我建议你构建一个map<int, float>,其中你的键是"工作类别",值是"工资乘数",这样你就可以在计算基本工资时快速查找,而不是运行100个条件词。