2016-10-15 109 views
1

嗨,這是我第一次在Stackoverflow上,所以我提前道歉,如果我不清楚我的「米問。我有一個課堂作業,需要華氏溫度陣列,將它們轉換爲攝氏溫度,然後將這些轉換後的數字放入另一個相同大小的數組中。我的問題似乎與內存位置,並從華氏陣列獲得實際值,並執行算術轉換該值。我搜索了一段時間試圖找到更多的信息,因爲它看起來很基本,但由於某種原因找不到任何幫助,因此我加入Stackoverflow的理由。任何幫助或建議(包括那些告訴我只是打擊我的大腦)或鏈接到教程將不勝感激。C++取出華氏溫度陣列,將它們轉換爲攝氏溫度,然後將攝氏溫度添加到新陣列

#include <string> 
#include <iostream> 
using namespace std; 

void toCelsius(double fahrenheitTemps[],double *celsiusTemps,int n){ 

    for (int i = 0; i < n; i++) { 
     *(celsiusTemps + i) = (((*(fahrenheitTemps + i)) - 32)*(5/9)); 
     cout << ((*(fahrenheitTemps + i) - 32)*(1.8)) << endl; 

    } 

} 
void PrintResults(double tF[], double tC[], int n) { 

    cout << "Fahrenheit Temps: "; 
    for (int i = 0; i < n; i++) { 
     cout << tF[i] << " "; 
    } 
    cout << endl; 

    cout << "Celsius Temps: "; 
    for (int i = 0; i < n; i++) { 
     cout << tF[i] << " "; //This was my main issue and mistake (it should be tC) view update to see corrected code 
    } 
    cout << endl; 
} 

int main(){ 
    double tempF[] = { 33.5,67.5,67.5,88.0,46.0,94.5,77.5,83.0,95.0,80.5 }, tempC[10]; 
    double * ptrTempF, * ptrTempC; 
    *ptrTempF = &tempF; 
    ptrTempC = tempC; 

    for (int i = 0; i < 10; i++) { 
     *(tempC + i) = (*(tempF + i) - 32)*(5/9); 
     cout << tempC << " " << tempC[i] << endl; 
    } 

    toCelsius(tempF, tempC, 10); 
    PrintResults(tempF, tempC, 10); 
} 

更新:我只是一個完整的白癡一切你們建議真正解決一些我遇到的錯誤問題。然而,數組tempC看起來像它沒有改變輸出的原因是因爲我把功能printResultscout << tF[i] << " ";其中cout << tC[i] << " ";應該已經。我的輸出看起來使它看起來像什麼都沒有工作,因爲從那時起。

這是代碼的工作形式,以防萬一有人網上搜尋這一點,並希望看到工作代碼:

#include <string> 
#include <iostream> 
using namespace std; 

void toCelsius(double fahrenheitTemps[],double * &celsiusTemps,int n){ //I think & made a difference 

    for (int i = 0; i < n; i++) { 
     celsiusTemps[i] = ((fahrenheitTemps[i] - 32.0)*(5.0/9.0)); 
    } 

} 

void PrintResults(double tF[], double tC[], int n) { 

    cout << "Fahrenheit Temps: "; 
    for (int i = 0; i < n; i++) { 
     cout << tF[i] << " "; 
    } 
    cout << endl; 

    cout << "Celsius Temps: "; 
    for (int i = 0; i < n; i++) { 
     cout << tC[i] << " "; 
    } 
    cout << endl; 
} 

int main(){ 
    double tempF[] = { 33.5,67.5,67.5,88.0,46.0,94.5,77.5,83.0,95.0,80.5 }, tempC[10]; 
    double * ptrTempC; 
    ptrTempC = tempC; 

    toCelsius(tempF, ptrTempC, 10); 
    PrintResults(tempF, tempC, 10); 
} 

回答

5
double * ptrTempF, * ptrTempC; 
*ptrTempF = &tempF; 

ptrTempf是一個指向double的指針。因此*ptrTempF是一個雙。

拋開這一點,這是未定義的行爲,取消引用未初始化的指針,此分配嘗試將指向double數組的指針指向double。當然,這沒有意義。分配確實應該:

ptrTempF = tempF; 

第二個錯誤:

*(celsiusTemps + i) = (((*(fahrenheitTemps + i)) - 32)*(5/9)); 

「5/9」 是整數除法,其計算爲0。你需要使它成爲double師:

*(celsiusTemps + i) = (((*(fahrenheitTemps + i)) - 32)*(5.0/9)); 
+0

感謝您的更正。我發佈的代碼是我嘗試了一堆不同的方法來嘗試在tempF數組中調用這些值。我真的只是試圖使用tempF中的值來創建新的值放入tempC。到目前爲止,考慮到你的建議,我仍然無法獲得tempC來保存toCelsius函數試圖分配它的新值。 –

+0

定義「無法獲取tempC來保存新值」。 –

+0

我發現我認爲tempC的數組值沒有改變的原因。作爲一種調試方法,我在toCelcius函數中輸出了一行來輸出tempC的值。不過,我錯誤地輸出tempF值,導致我認爲沒有任何工作正常工作。對此感到抱歉,感謝您的幫助。 –

1
5/9 

你將int通過int這裏,結果也一個int,向下舍入。換句話說,而不是打字(5/9)你可以輸入0。將其更改爲

5.0/9.0 

順便說一句,對於指針*(celsiusTemps + i)是完全一樣celsiusTemps[i],但它減少了括號,使你的代碼更易讀。

相關問題