具有2个功能的简单程序不起作用

时间:2012-06-15 06:22:13

标签: c++

我是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();
}

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

P.S。对不起我的英文

编辑:使用此代码。

#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;
}

5 个答案:

答案 0 :(得分:6)

min变量从不初始化,应初始化为较大的值。

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

max和min仅在函数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;

答案 1 :(得分:2)

至少,您必须限定coutcinendl的命名空间,所有这些命名空间都在命名空间std中。

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

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

MinMax massiv() { .... }

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

答案 2 :(得分:2)

您需要在此处考虑数据流。

你的main函数执行两个函数,但数据是如何从massiv函数或结果函数中获得的?

您可以使用全局变量,也可以使主体结构更像:

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

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

答案 3 :(得分:-3)

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

答案 4 :(得分:-3)

imin min imax max 应该为函数rezult()提供全局访问权限