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