C/C++

Помогите найти ошибки в коде на C++, не выводится последняя строчка

#include <iostream>
#include <stdlib.h>
using namespace std;
void rez(int S1, int n, int m, int* V, int t[])
{
int S = S1 * n;
*V = 0;
for (int i = 0; i < m; i++)
{
if ((S / t[i]) > *V)
*V = S / t[i];

}
cout << V;
}
int main()
{
setlocale(LC_ALL, "Russian");
cout << " Программа " << endl << " Велогонщик " << endl << " Cовместная разработка " << endl;
int S1, m, n, t[8];
int *V;
cout << "Введите длину 1 круга (150 - 1500 метров): " << endl;
cin >> S1;
if ((S1 >= 150) and (S1 <= 1500));
else
{
cout << "Ошибка введенное значение невозможно ";
main();

}
cout << "Введите кол-во кругов(3-10): " << endl;
cin >> n;
if (n >= 3 and n <= 10);
else
{
cout << "Ошибка введенное значение невозможно ";
main();

}
cout << "Введите кол-во гонщиков(5-20): " << endl;
cin >> m;
if ((m >= 5) and (m <= 20));
else
{
cout << "Ошибка введенное значение невозможно ";
main();

}
cout << "Введите время каждого гонщика(в секундах): " << endl;
for (int i = 0; i < m; i++)
{
cout << "Время [" << i + 1 << "] гонщика " << ": ";
cin >> t[i];
if (t[i] >= 60 and t[i] <= 960);
else
{
cout << "Ошибка введенное значение невозможно ";
main();

}


}
rez(S1, n, m, V, t);
cout << "Длина круга - " << S1 << " метров " << endl << "Кол-во кругов - " << n << endl << "Кол-во гонщиков: " << m << endl << "Скорость победителя: " << *V << " метров в секунду " << endl;
}
В коде C++ есть несколько ошибок:

Переменная V объявлена как указатель, но она ни на что не указывает. Он должен быть инициализирован и выделена память, прежде чем его можно будет использовать. Один из способов исправить это - изменить объявление V на целое число и передать его адрес функции rez следующим образом: int V; rez(S1, n, m, &V, t);

Функция rez ничего не возвращает. Он должен возвращать значение V в конце функции. Добавьте return *V; в конце функции rez.

В инструкции cout в функции rez вам нужно вывести значение *V, обратите внимание на адрес V. Измените инструкцию cout на cout << *V;

В функции main вы вызываете main() рекурсивно, когда пользователь вводит недопустимое значение. Это не очень хорошая практика и может привести к переполнению стека. Вместо этого вы можете использовать цикл, чтобы запросить у пользователя допустимый ввод.

Вот исправленный код:

#include <iostream>
#include <stdlib.h>

using namespace std;

int rez(int S1, int n, int m, int* V, int t[])
{
int S = S1 * n;
*V = 0;
for (int i = 0; i < m; i++)
{
if ((S / t[i]) > *V)
*V = S / t[i];
}
return *V;
}

int main()
{
setlocale(LC_ALL, "Russian");
cout << " Программа " << endl << " Велогонщик " << endl << " Cовместная разработка " << endl;

int S1, m, n, t[8], V;

cout << "Введите длину 1 круга (150 - 1500 метров): " << endl;
cin >> S1;
if ((S1 < 150) or (S1 > 1500))
{
cout << "Ошибка введенное значение невозможно ";
return 1;
}

cout << "Введите кол-во кругов(3-10): " << endl;
cin >> n;
if (n < 3 or n > 10)
{
cout << "Ошибка введенное значение невозможно ";
return 1;
}

cout << "Введите кол-во гонщиков(5-20): " << endl;
cin >> m;
if (m < 5 or m > 20)
{
cout << "Ошибка введенное значение невозможно ";
return 1;
}

cout << "Введите время каждого гонщика(в секундах): " << endl;
for (int i = 0; i < m; i++)
{
cout << "Время [" << i + 1 << "] гонщика " << ": ";
cin >> t[i];
if (t[i] < 60 or t[i] > 960)
{
cout << "Ошибка введенное значение невозможно ";
return 1;
}
}

rez(S1, n, m, &V, t);

cout << "Длина круга - " << S1 << " метров " << endl << "К
Данила Пузырев
Данила Пузырев
5 236
Лучший ответ
В коде несколько ошибок:

В функции rez параметр V должен быть указателем на int, а не самим int, так как нужно изменить значение переменной, на которую он указывает. Нужно добавить оператор взятия адреса & при передаче параметра в функцию, и в самой функции нужно разыменовать указатель при обращении к переменной.

Последняя строка в функции rez должна выводить значение переменной *V, а не указателя V.

В блоках else, где происходит вывод сообщения об ошибке, вызывается функция main(). Это неправильно, потому что main() не должна вызывать сама себя. Вместо этого нужно добавить оператор return 0;, чтобы завершить программу.
Нияз Гилязов
Нияз Гилязов
41 233