2016-10-15 14 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は、ダブルへのポインタです。したがって、*ptrTempFはダブルです。

これは未定義の動作であり、未初期化ポインターを参照解除することを除いて、このアサイメントはダブルへのポインターをダブルに割り当てようとします。それはもちろん、意味をなさない。割り当ては本当にする必要があります:

ptrTempF = tempF; 

秒バグ:

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

は "5/9" は、あなたがそれdouble分裂ようにする必要があり、0に算出し、整数除算であり、

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

訂正ありがとうございます。私が投稿したコードは、私がtempF配列内のそれらの値を試して呼び出すさまざまな方法を試していたことです。私はちょうどtempCの値を使ってtempCに入れる新しい値を作成しようとしています。これまでのところあなたの提案を考慮に入れても、私はまだtoCelsius関数が割り当てようとする新しい値をtempCに保持させることができません。 –

+0

「新しい値を保持するtempCを取得できません」を定義します。 –

+0

tempCの配列の値が変わっていないと思った理由がわかりました。デバッグの方法として、私はtoCelcius関数でtempCの値を出力する行を持っていました。しかし、誤ってtempFの値を出力して、正常に動作していても何も動作していないと思うようになった。混乱と助けてくれてありがとうございます。 –

1
5/9 

あなたがここにintによってintを分割している、との結果でもありますint、切り捨て。つまり、(5/9)と入力する代わりに、0と入力します。ちなみに

5.0/9.0 

に変更しては、ポインタのため*(celsiusTemps + i)celsiusTemps[i]と全く同じであるが、それは括弧が削減し、あなたのコードをより読みやすくなります。

関連する問題