Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在if语句中出错的代码_C++ - Fatal编程技术网

C++ 在if语句中出错的代码

C++ 在if语句中出错的代码,c++,C++,当我将第二个if添加到calculateTotalCarCharge中测试汽车尺寸M,然后尝试测试c的条件时,我得到了M的答案(77.28和167.44),当我真的想要(68.73和148.92)时,它几乎就像代码不知何故进入下一个条件 试验条件 Type - Days - Amount C - 3 - 68.73 M - 3 - 77.28 C - 7 - 148.92 M - 7 - 167.44 #包括//用于I/O #包含//用于格式化输出 #包括//用于数学 使用名称空间std;

当我将第二个if添加到calculateTotalCarCharge中测试汽车尺寸M,然后尝试测试c的条件时,我得到了M的答案(77.28和167.44),当我真的想要(68.73和148.92)时,它几乎就像代码不知何故进入下一个条件

试验条件

Type - Days - Amount
C - 3 - 68.73
M - 3 - 77.28
C - 7 - 148.92
M - 7 - 167.44

#包括//用于I/O
#包含//用于格式化输出
#包括//用于数学
使用名称空间std;
//原型
char validateCarChoice();
void displayProgramDescription();
int validateEnumEntry(字符串提示);
双重计算总费用(字符大小,整数天);
//全局常数
const char COMPACT='C';
const char MID='M';
const char FULL='F';
const char SUV='S';
康斯特双紧凑型日均费用=22.91;
施工期双倍中日费用=25.76;
康斯特双倍全价日费=28.87;
const double SUV每日费用=98.88;
// --------------------------------------------------------------------------
//说明:
//输入参数:
//返回:
// ---------------------------------------------------------------------------
int main()
{
//局部常数
const string ENTER_DAYS_rendered=“输入租用天数:”;
常量字符串ENTER_MILES_DRIVEN=“输入行驶里程数:”;
//局部变量
选择字符用户类型;
煤焦粒度;
int daysRented;
双英里驱动;
双重收费;
//调用函数以显示程序描述
displayProgramDescription();
//调用函数以验证用户输入的车辆选择
UserCartypeSelected=validateCarChoice();
//如果选择的车辆类型为suv,则仅提示输入天数
//租用,如果不提示租用天数和行驶里程。
如果(UserCartypeSelected=='S')
{
daysRented=validateEnumEntry(输入租用的天数);
}
其他的
{   
daysRented=validateEnumEntry(输入租用的天数);
milesDriven=validateEnumEntry(输入_MILES_DRIVEN);
}
车费=计算总车费(车号,天数);
//删除

cout正如注释中指出的,您正在
中的if语句中赋值(carSize='C')和(carSize='M')
。出于兴趣,为什么不在此处的字符上选择一个
开关
?看起来分支是相互排斥的,并且您没有在分支中变异
carSize
?这可能有助于避免将来出现此类问题:

switch (carSize)
{
    case 'C':
       if (daysRented < WEEK)
        ...
       break;
    case 'M':
       // ...
 }
但是,您正在将未初始化的变量
carSize
传递给
calculateTotalCarCharge
函数:

carCharge = calculateTotalCarCharge(carSize, daysRented);
您应该将分配更改为carSize

carSize = validateCarChoice();

然后完全删除
usercartypeselected
变量。

要检查条件,必须使用:

if(carSize='M')


if(carSize='C')

因为当您使用该语句时:

switch (carSize)
{
    case 'C':
       if (daysRented < WEEK)
        ...
       break;
    case 'M':
       // ...
 }
if(carSize='M')
只将值
carSize
分配给
'M'

并将在if语句中执行代码。 此条件也适用于
if(carSize='C')

或使用switch语句:

switch (carSize)
{
    case 'C':
       if (daysRented < WEEK)
        ...
       break;
    case 'M':
       // ...
 }
开关(carSize)
{
案例“C”:
如果(天数<周)
...
打破
案例“M”:
// ...
}

在这些与文字的比较中,一个好主意是反转操作数,如果使用单相等而不是双相等,则会引发编译器错误

if (var == 'C')  // compiles, runs correctly
if (var = 'C')   // compiles, runs incorrectly, results in stackoverflow question
if ('C' == var)  // compiles, runs correctly
if ('C' = var)   // does not compile, fix this problem immediately

也许使用两个
==
会是一个更好的主意……这需要筛选大量代码,而且需要用户交互。我建议您将其简化为一个;这是一项非常有用的技能,并且很有可能您自己会发现错误。特别是
if(carSize='C')
(carSize='M'))
我已经设置了carSize='C'和carSize='M'运行计算并得到0。将其放入switch语句,计算结果为0。还有一个错误-我已经更新了答案。可以使用两个名为carSize的变量吗?一个在validateCarChoice,一个在main?因此,如果我将其传递给calculateTotalCarCharge I,我仍然可以使用usercartypeselectedn停止carSize,对吗?是的,确实如此-变量的作用域是它们在其中定义的函数/方法。好的,谢谢!今晚我将进一步查看我已将其更新为carSize='C'和carSize='M',现在计算为0
if (var == 'C')  // compiles, runs correctly
if (var = 'C')   // compiles, runs incorrectly, results in stackoverflow question
if ('C' == var)  // compiles, runs correctly
if ('C' = var)   // does not compile, fix this problem immediately