2017-04-26 155 views
-3

我不断收到错误消息,说明''rate'在此函数中未初始化“。未初始化的变量故障C++

任何人都可以看到为什么?我查看了我的代码,并将其正确地传递给我的其他函数,并且错误源于此函数。有任何想法吗?

double compute_rate(int userAge_array[], char sportType_array[], int index) 
{ 
    double rate; 
    if (sportType_array[index] == 'f') { 
    if (userAge_array[index] < 25) { 
     rate = 68.95; 
    } 
    else if (userAge_array[index] > 25) { 
     rate = 55.95; 
    } 
    } 
    if (sportType_array[index] == 'g') { 
    if (userAge_array[index] < 25) { 
     rate = 73.95; 
    } 
    else if (userAge_array[index] > 25) { 
     rate = 65.95; 
    } 
    } 
    if (sportType_array[index] == 'h') { 
    if (userAge_array[index] < 25) { 
     rate = 99.95; 
    } 
    else if (userAge_array[index] > 25) { 
     rate = 92.95; 
    } 
    } 

    return rate; 
} 
+1

当你达到“退货率”时会发生什么?没有任何'rate ='行? –

+1

假设'sportsType_array [index] =='a'' – rwols

+0

如果sportType_array [index]是f,g,h,比如说'z'以外的东西,那么比率是多少? –

回答

4

您正在返回rate在函数的结束,但它可能永远不会初始化,因为所有的作业都可能根本不会被处理内部IFS语句。

解决方案:

首先使用一些默认值,你会在情况下接受任何IFS的作品之一分配给它:

double rate=0.0; 
+0

所以你的解决方案工作,但是当我尝试在下一个函数中将rate传递给另一个变量时,我收到了一个similair错误。 “可变”充电设置但未使用“你可以在这里看到第二个功能。我还应该提到,我尝试将第一个解决方案应用于这个变量并没有成功。 [链接](https://gist.github.com/anonymous/ed79f637d0daa0b35a295ddd6136bfdf) – gf807

+0

也许你应该在代码中做些事情。我的意思是你计算它,但不要对计算值做任何事情。 – drescherjm

+0

没有意识到我在该函数中为“费率”而不是“费用”做了一个cout声明。谢谢你,代码现在工作。 – gf807

0

如果sportType_array[index]不是 'F',“G '或'h',函数将直接返回到返回值,返回rate,该值未初始化。

如果这些数组中的值不正确,您希望返回什么值?最好设置为rate,即使它不是假设发生。

1

如果sportType_array[index]'f''g',或'h',没有if块将被执行。您应该将这些更改为if/else if,然后在没有匹配的情况下添加最终的else子句。

但更可能的问题是userAge_array[index] == 25。当它小于25或大于25时设置为rate,但从未设置为rate,因为它恰好等于25。尝试使用else而不是else if,因此您覆盖了所有情况。

double compute_rate(int userAge_array[], char sportType_array[], int index) 
{ 
    double rate; 
    if (sportType_array[index] == 'f') { 
    if (userAge_array[index] < 25) { 
     rate = 68.95; 
    } 
    else { 
     rate = 55.95; 
    } 
    } 
    else if (sportType_array[index] == 'g') { 
    if (userAge_array[index] < 25) { 
     rate = 73.95; 
    } 
    else { 
     rate = 65.95; 
    } 
    } 
    else if (sportType_array[index] == 'h') { 
    if (userAge_array[index] < 25) { 
     rate = 99.95; 
    } 
    else { 
     rate = 92.95; 
    } 
    } 
    else { 
     rate = 0.0; 
    } 

    return rate; 
}