Ваш код имеет неопределенное поведение .
Оба ваших вызова tempGuage()
передаются по недействительным int&
ссылкам в 1-м параметре, так как индекс [totalTemp]
обращается к int
, то есть за пределами каждого массива . Таким образом, даже если tempGauge()
работает правильно (что не работает), он будет заполнять недействительную память. Поскольку вы явно хотите заполнить массивы, вам нужно изменить [totalTemp]
на [0]
, чтобы начинать заполнять не с конца, а с начала каждого массива.
Внутри tempGauge()
, maxTemps
это неинициализировано при вводе l oop, поэтому число итераций равно неопределенно . Но даже если это не так, оператор cin >>array;
не читает весь массив, как вы ожидаете. Даже если бы он мог, он не знал бы, сколько int
s нужно прочитать, поскольку array
объявлено как ссылка на один int
, и вы не можете передать maxTemps
в operator>>
. Вам потребуется al oop, чтобы прочитать каждый int
по отдельности, что вы пытаетесь сделать, но вы не выполняете циклы правильно. Кроме того, cin >> array
необходимо изменить на cin >> array[i];
, который не будет работать, если int &array
не будет изменен на int (&array)[10]
или int *array
. В этом случае main()
необходимо будет соответствующим образом обновить, удалив [0]
при передаче в каждом массиве.
С учетом сказанного попробуйте это вместо:
#include <limits>
const int totalTemp = 10;
int tempGuage(int (&array)[totalTemp], int actDay);
void userData();
int main()
{
int firstDay[totalTemp] = {};
int secondDay[totalTemp] = {};
tempGuage(firstDay, 1);
tempGuage(secondDay, 2);
userData();
return 0;
}
int tempGuage(int (&array)[totalTemp], int actDay)
{
int maxTemps;
cout << "Enter # of temps on DAY " << actDay << ":";
do
{
if (!(cin >> maxTemps))
{
cout << "Invalid input. Try again.";
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
else if ((maxTemps <= 0) || (maxTemps > totalTemp))
{
cout << "Enter at least 1 but no more than " << totalTemp << ". Try again.";
}
else
{
cout << "Enter the " << maxTemps << " temps(s):";
for(int i = 0; i < maxTemps; ++i)
{
while (!(cin >> array[i]))
{
cout << "Invalid input for temp " << i+1 << ". Try again.";
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
}
break;
}
}
while (true);
return maxTemps;
}
void userData()
{
//...
}
Live Demo