嗨,所以这是我第一次使用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);
}
更新:我只是一个完整的白痴你们所建议的一切真正修复了我遇到的一些bug问题。但是,数组tempC
看起来没有在输出中更改的原因是因为我放置了printResults
cout << 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);
}
。我的输出看起来好像什么都没有工作,因为它是什么时候。
这是代码的工作形式,以防万一有人搜索这个并希望查看工作代码:
{{1}}
答案 0 :(得分: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));
答案 1 :(得分:1)
5 / 9
您将int
除以int
此处,结果也是int
,向下舍入。换句话说,您可以键入(5 / 9)
而不是键入0
。将其更改为
5.0 / 9.0
顺便说一句,指针*(celsiusTemps + i)
与celsiusTemps[i]
完全相同,但它会减少括号并使代码更具可读性。