1

我是 C++ 新手,并试图制作两个简单的函数,但出了点问题。

我正在尝试执行以下操作:

1.Function for input some data.
2.Function to show what data is input.

我只是想让它变得简单。到目前为止我写的代码是:

#include <iostream>
void masiv()
{
  int x[10];
  int n, i;
  int min;
  int max=0, imax=0, imin;

  cout << "Enter the number of elements: ";
  cin >> n;

  for(i=0; i < n; i++)
  {
      cout << "Input value for x["<<i<<"]=";
      cin >> x[i];

  if (min > x[i])
  {
      min = x [i];
      imin = i;
  }

  if (max < x[i])
  {
     max = x[i];
     imax = i;
  }
}
void rezult()
{
  cout << "the smallest value on is xthe biggest value on is x["<<imin<<"]=" << min <<endl;
  cout << "nai golqmata stoinost e na x["<<imax<<"]=" << max <<endl;
}
void main()
{
  masiv();
  rezult();
}

我有一堆错误。我知道这是糟糕的代码,但正如我所提到的,我才刚刚开始。谢谢

Ps对不起我的英语

编辑:使用此代码。

#include <iostream>
using namespace std;

void masiv(int& min, int&max)
{
 int x[10];
 int n;
 int i;
 int imin, imax;
 cout << "Enter the number of elements: ";
 cin >> n;
 for(i=0; i < n; i++)
 {
  cout << "Input value for x["<<i<<"]=";
  cin >> x[i];
  if(min > x[i])
  {
    min = x [i];
    imin = i;
  }
  if(max < x[i])
  {
    max = x[i];
    imax = i;
  }
 }
}

 void rezult(int min, int max)
{
 cout << "the smallest value on is x= " << min << endl;
 cout << "the biggest value on is x= " << max << endl;
 system ("pause");
}

int main(int argc, char** argv)
{
 int min = 999999; 
 int max = -999999;
 masiv(min,max);
 rezult(min,max);
 return 0;
}
4

5 回答 5

6

min 变量永远不会被初始化,它应该被初始化为一个很大的值。

您声明了一个数组int x[10];,但稍后您让用户输入值的数量cin>>n而不检查它是否大于 10 或负数。这可能会导致问题。

最大值和最小值仅在函数 masiv() 中声明,它们无法在函数外部访问。如果您想让它们可访问,例如可以将它们传递给函数,而不是在函数内声明它们:

void masiv(int& min, int&max) // pass by reference
{...}

void rezult(int min, int max)
{...}

int main(int argc, char** argv) // proper main prototype
{
   int min = 999999; 
   int max = -999999;
   masiv(min,max);
   rezult(min,max);
   return 0;
}

编辑:并添加使用命名空间std;在文件开头

#include <iostream>
using namespace std;
于 2012-06-15T06:35:45.710 回答
2

您需要在这里考虑数据流。

您的 main 函数执行了两个函数,但是数据是如何从 massiv 函数中出来或进入 result 函数的呢?

你可以使用全局变量,或者你可以让你的主要结构更像:

void main()
{
    int x[10];
    massiv(x);
    rezult(x);
}

rezult 函数应该处理 x 中的结果并填充 min 和 max 变量。将 if 语句从 massiv 移至 rezult。

于 2012-06-15T06:38:01.783 回答
2

至少,您必须为 和限定命名空间cout,所有这些都在命名空间中。cinendlstd

至于局部范围变量的问题,我将更改签名masiv以返回std::pair<int,int>包含最小值和最大值的值:

typedef std::pair<int,int> MinMax;

MinMax massiv() { .... }

为什么不通过minmax引用?因为您依赖于传递的引用的值。你必须检查它们是否合理等等。从函数本身返回最小值和最大值可以完全控制函数。

于 2012-06-15T06:28:51.877 回答
-3

首先,所有变量都在 massiv() 函数中本地定义,首先是全局变量。

于 2012-06-15T06:28:01.300 回答
-3

iminminimaxmax应该使函数 rezult() 访问它们的全局。

于 2012-06-15T06:30:16.727 回答