编程新手,无法使用struct将数组传递给函数。有任何想法吗?编译器生成错误“从不兼容的类型天气分配到双精度”。 提前谢谢/
struct Weather
{
double TotalRainfall[12];
double HTemperature[12];
double LTemperature[12];
double AverageTemperature[12];
};
Weather AverageTemp(Weather *W, int size)
{
for(int i = 1;i<=12;i++)
{
return W[i].HTemperature[i]+W[i].LTemperature[i];
}
}
int main()
{
Weather W[12];
int size =12;
for(int i = 1;i<=12;i++)
{
cout << "Enter Total Rainfall in " << i << " month";
cin >> W[i].TotalRainfall[i];
cout << " Enter the highest temperature " << i << " month";
cin >> W[i].HTemperature[i];
cout << " Enter the Lowest temperature " << i << " month";
cin >> W[i].LTemperature[i];
}
for(int i = 1;i<=12;i++)
{
W[i].AverageTemperature[i]= AverageTemp(W, size);
}
答案 0 :(得分:2)
您的代码中存在多个错误。让我们从不兼容类型分配double的错误开始。您的示例中的AverageTemp
是一个返回Weather
类型的方法。我假设你打算返回一个double值。
另一个问题是您输入的是每月的总降雨量,最高和最低温度以及平均温度。根据我的测量,你需要12 * 4或48倍。相反,你有一个12 Weather
结构的数组,每个结构包含48个双打或576双!我猜你不打算这样做,所以我简化你的例子只使用一个Weather
结构。现在我们使用一个Weather
实例并将该实例作为参考传递给AverageTemp
(因此我们不进行复制)。
第三个问题有点微妙,但在你修复前两个问题后肯定会发现它。您不能使用索引n访问n数组的第n个元素。换句话说,使用索引 0 访问第一个元素,因为从零开始访问数组。我从1开始到12结束的每个循环的含义都会导致数字12出现一个丑陋的错误,因为你的数组中没有第13个元素。大多数程序员让索引变量从0开始计数到但不等于限制,所以你永远不必担心过去。因此,我补偿了月份数的显示。
新代码如下:
// ...
double AverageTemp(Weather &w, int index)
{
return (w.HTemperature[index]+w.LTemperature[index])/2.0;
}
int main()
{
Weather w;
int size =12;
for(int i = 0;i<12;i++)
{
cout << "Enter Total Rainfall in " << i+1 << " month" << endl;
cin >> w.TotalRainfall[i];
cout << " Enter the highest temperature " << i+1 << " month" << endl;
cin >> w.HTemperature[i];
cout << " Enter the Lowest temperature " << i+1 << " month" << endl;
cin >> w.LTemperature[i];
}
for(int i = 0;i<12;i++)
{
w.AverageTemperature[i]= AverageTemp(w, i);
}
}
如果您有任何疑问,请询问!重要的是要理解这些概念而不是工作代码,因为它将来会更好地为您服务。