C++If语句或文本文件
C++ If Statement or Text File
我给出以下
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个条件词。
- 文本文件中的单词链表
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 如何将内容数组写入文本文件?
- 无法通过空白将文本文件行分隔为矢量
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- C++将文本文件中的数据读取到结构数组中
- 在指针的帮助下,文本文件中单词的频率
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 将值从二维数组输出到文本文件
- 如何使用 c++ 实现并发文件/文本编辑?
- 我需要转换一些代码,以便它适用于输入和输出文件文本
- 通过套接字发送二进制文件.文本文件有效,其他文件无效
- 将大型数据文件拆分为多个小文件(文本格式)
- 如何读取输入文件(文本文件)并将输入验证为有效整数
- 从文本文件/文本流中读取Q字符串错误
- 从文本文件(文本解析器)C++中读取行和列的逻辑
- 如何将*.css文件(文本文件)的内容与附加信息存储在新文件中?
- 关于内存映射文件和使用大文件文本编辑器
- 如何在读取文件文本时跳过"n"
- 使用libzip从.zip获取文件(文本除外)