Лишний вывод при вызове функции
В конце программы выводится количество столбцов, этого не должно происходить, но происходит, а почему я не совсем понимаю.
#include <iostream>
using namespace std;
const int n=4;
const int m=3;
int minstlb(int a[n][m], int n, int m)
{
for (int j = 0; j < m; ++j)
{
int min = a[0][j];
for (int i = 0; i < n; ++i)
if (a[i][j]<min)
min = a[i][j];
setlocale(LC_ALL,"Russian");
cout << "Мин значение в " << j+1 << " столбце = " << min << endl;
}
}
int main () {
const int n=4;
const int m=3;
int i,j;
int a[n][m];
for (i=0;i<n;i++)
{
for (j=0;j<m;j++)
{
cin>>a[i][j];
}
}
cout<<minstlb(a,n,m);
return 0;
}
Ответы (1 шт):
Видимо, Ваша IDE этого не фиксирует, но у Вас есть функция int minstlb(int a[n][m], int n, int m). int в её начале означает, что она должна возвращать значение типа int. То есть в нормальной ситуации Вы должны были бы сделать в данной функции return и вернуть тем самым какое-то значение. А т.к. Вы этого не делаете, предполагаю, что возвращается просто случайное значение, которое находится в памяти на том месте, где должно быть возвращаемое.
Итак, что нужно исправить:
- Если Вы не возвращаете значение из функции, сделайте её
void, то есть вместоint minstlb(int a[n][m], int n, int m)должно бытьvoid minstlb(int a[n][m], int n, int m). - Если Ваша функция выводит что-то на экран (а Ваша выводит, т.к. вызывает
cout), то, чтобы она что-то вывела, не нужно делать вот такcout<<minstlb(a,n,m);. Эта операция как раз-таки и выводит на экран лишнее число, потому что эта операция выводит возвращаемое значение функции, а не то, что она печатает. Чтобы функция просто напечатала на экран то, что Вам нужно, достаточно сделатьminstlb(a,n,m);. Аcoutвызовется уже внутри функции.
В итоге я бы переписал Вашу программу так:
#include <iostream>
using namespace std;
const int n=4;
const int m=3;
void minstlb(int a[n][m], int n, int m)
{
for (int j = 0; j < m; ++j)
{
int min = a[0][j];
for (int i = 0; i < n; ++i)
if (a[i][j]<min)
min = a[i][j];
setlocale(LC_ALL,"Russian");
cout << "Мин значение в " << j+1 << " столбце = " << min << endl;
}
}
int main ()
{
const int n=4;
const int m=3;
int i,j;
int a[n][m];
for (i=0;i<n;i++)
{
for (j=0;j<m;j++)
{
cin>>a[i][j];
}
}
minstlb(a,n,m);
return 0;
}
P.S. Не знаю, в чём Вы запускали свой код, но, например, Visual Studio 2015 у меня отказалась его запускать с ошибкой
Ошибка C4716 minstlb: должна возвращать значение
P.P.S. По Вашему вопросу видно, что Вы не вполне разбираетесь в механизме работы функций в C++. Советую почитать, например, это, или же ещё любой из сотен доступных источников по данной теме.