Я установил массив массива и передал его функции. Я пытаюсь заполнить этот структурный массив с вводом. Я изначально настроил входы как:
w->rainFall
, но не смог понять, как он будет заполнять других подписчиков.
Я изменил его на:
w[counter].rainFall
думая, что это будет правильно циклически проходить по всем массивам, но выходные данные не дают ожидаемых результатов.
Может ли кто-нибудь помочь мне понять, как правильно заполнить эту структуру из функции?
Полный код здесь
#include "pch.h"
#include <iostream>
using namespace std;
struct Weather
{
int rainFall;
int highTemp;
int lowTemp;
double averageTemp;
};
enum Months
{
January, February, March, April, May, June, July, August, September, October, November, December
};
void showData(struct Weather* w, int);
void getData(struct Weather* w, int);
void displayMonthName(Months);
int main()
{
const int SIZE = December+1;
struct Weather w[SIZE];
Months thisMonth;
cout << "Enter The Following Information: " << endl;
for (thisMonth = January; thisMonth <= December; thisMonth = static_cast<Months>(thisMonth +1))
{
int counter = 0;
displayMonthName(thisMonth);
cout << " | Month "<< thisMonth+1 << " " << endl;
getData(w, counter);
counter++;
}
showData(w, SIZE);
}
void showData(struct Weather* w, int SIZE)
{
for (int i = 0; i <= SIZE; i++)
{
cout << w[i].rainFall << endl;
cout << w[i].highTemp << endl;
cout << w[i].lowTemp << endl << endl;
}
}
void getData(struct Weather* w, int counter)
{
cout << " Total Rainfall: ";
cin >> w[counter].rainFall;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
while (!cin || w->rainFall < 0)
{
cout << "Rainfall cannot be less than 0 inches" << endl;
cout << " Total Rainfall: ";
cin >> w[counter].rainFall;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
cout << " High Temperature: ";
cin >> w[counter].highTemp;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
while (!cin || w->highTemp <-100 || w->highTemp >140)
{
cout << "High Temperature must be between -100 & +140" << endl;
cout << " High Temperature: ";
cin >> w[counter].highTemp;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
cout << " Low Temperature :";
cin >> w[counter].lowTemp;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
while (!cin || w->lowTemp > w->highTemp || w->lowTemp < -100 || w->lowTemp >140)
{
cout << "Low Temperature must be between -100 & +140 while also being lower than the High Temperature" << endl;
cout << endl << " Low Temperature :";
cin >> w[counter].lowTemp;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
}
void displayMonthName(Months m)
{
switch (m)
{
case January:
cout << "January";
break;
case February:
cout << "February";
break;
case March:
cout << "March";
break;
case April:
cout << "April";
break;
case May:
cout << "May";
break;
case June:
cout << "June";
break;
case July:
cout << "July";
break;
case August:
cout << "August";
break;
case September:
cout << "September";
break;
case October:
cout << "October";
break;
case November:
cout << "November";
break;
case December:
cout << "December";
break;
}
}