C++采用华氏温度数组,将它们转换成摄氏度,然后将摄氏温度加到一个新数组中。

C++采用华氏温度数组,将它们转换成摄氏度,然后将摄氏温度加到一个新数组中。,c++,arrays,C++,Arrays,嗨,这是我第一次使用Stackoverflow,所以如果我不清楚我的问题,我会提前道歉。我有一个作业,让学生们以华氏温度为单位,将其转换为摄氏温度,然后将这些转换后的数字放入另一个相同大小的数组中。我的问题似乎是内存位置和从华氏数组获取实际值,并执行算术转换该值。我已经搜索了一段时间,试图找到更多关于这个的信息,因为它看起来很基本,但由于某些原因找不到任何帮助,因此我加入Stackoverflow的理由。任何帮助或建议,包括那些告诉我要好好开动脑筋的建议或教程链接,都将不胜感激 #include

嗨,这是我第一次使用Stackoverflow,所以如果我不清楚我的问题,我会提前道歉。我有一个作业,让学生们以华氏温度为单位,将其转换为摄氏温度,然后将这些转换后的数字放入另一个相同大小的数组中。我的问题似乎是内存位置和从华氏数组获取实际值,并执行算术转换该值。我已经搜索了一段时间,试图找到更多关于这个的信息,因为它看起来很基本,但由于某些原因找不到任何帮助,因此我加入Stackoverflow的理由。任何帮助或建议,包括那些告诉我要好好开动脑筋的建议或教程链接,都将不胜感激

#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);
}
这里用int除以int,结果也是一个int,向下舍入。换句话说,您可以键入0而不是键入5/9。换成

5.0 / 9.0
顺便说一下,对于指针*celsiusTemps+i与celsiusTemps[i]完全相同,但它减少了括号,使代码更具可读性

 double * ptrTempF, * ptrTempC;
*ptrTempF = &tempF;
这里用int除以int,结果也是一个int,向下舍入。换句话说,您可以键入0而不是键入5/9。换成

5.0 / 9.0
顺便说一下,对于指针*celsiusTemps+i与celsiusTemps[i]完全相同,但它减少了括号,使代码更具可读性

 double * ptrTempF, * ptrTempC;
*ptrTempF = &tempF;
ptrTempf是指向double的指针。因此,ptrTempF是一个双重的

撇开这是未定义的行为不谈,取消对非斜体指针的引用,此分配尝试将指向double数组的指针分配给double数组。当然,这毫无意义。任务应该是:

ptrTempF = tempF;
第二个错误:

*(celsiusTemps + i) = (((*(fahrenheitTemps + i)) - 32)*(5 / 9));
5/9是整数除法,计算为0。您需要将其设置为双分区:

*(celsiusTemps + i) = (((*(fahrenheitTemps + i)) - 32)*(5.0 / 9));
ptrTempf是指向double的指针。因此,ptrTempF是一个双重的

撇开这是未定义的行为不谈,取消对非斜体指针的引用,此分配尝试将指向double数组的指针分配给double数组。当然,这毫无意义。任务应该是:

ptrTempF = tempF;
第二个错误:

*(celsiusTemps + i) = (((*(fahrenheitTemps + i)) - 32)*(5 / 9));
5/9是整数除法,计算为0。您需要将其设置为双分区:

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

谢谢你的更正。我发布的代码是我尝试了一系列不同的方法来尝试在tempF数组中调用这些值。我真的只是尝试使用tempF中的值来创建新的值以放入tempC中。到目前为止,在考虑您的建议时,我仍然无法让tempC保存新值,toCelsius函数尝试分配它。Define无法让tempC保存新值。我找到了我认为tempC保存的数组值没有更改的原因。作为一种调试方法,我在toCelcius函数中有一行输出tempC的值。然而,我错误地让它输出tempF值,使我认为当它正常工作时,什么都没有工作。很抱歉造成混淆,谢谢您的帮助。谢谢您的更正。我发布的代码是我尝试了一系列不同的方法来尝试在tempF数组中调用这些值。我真的只是尝试使用tempF中的值来创建新的值以放入tempC中。到目前为止,在考虑您的建议时,我仍然无法让tempC保存新值,toCelsius函数尝试分配它。Define无法让tempC保存新值。我找到了我认为tempC保存的数组值没有更改的原因。作为一种调试方法,我在toCelcius函数中有一行输出tempC的值。然而,我错误地让它输出tempF值,使我认为当它正常工作时,什么都没有工作。很抱歉造成混乱,谢谢你的帮助。