我在main下的输出并不是我所期待的

时间:2014-02-12 04:07:00

标签: c++ arrays visual-c++

我的任务是编写一个程序,询问用户他/她想输入多少个整数。动态创建数组并接受用户输入的数字并将其放入 数组。将数组传递给函数以确定输入的最小数字。打印 最小的数字。在适当或可能的地方使用指针表示法。

我觉得我掌握了数组的传递和指针符号(请随时纠正我,因为我总是渴望学习)但主要功能下的输出并不是我所期待的,或者可能是什么我应该期待并且没有意识到这一点。这是我到目前为止所做的,但我坚持让它输出用户输入数组中的最小值。

#include "stdafx.h"

void CreateValues (int [], int);
int FindSmallest(int [], int);

int _tmain(int argc, _TCHAR* argv[])
{
int numValues = 0;


cout << "How many values would you like to enter?" << endl;
cin >> numValues;

int *pArray = new int[numValues];

CreateValues (pArray, numValues);

FindSmallest(pArray, numValues);

delete[] pArray;

int i = 0;
i = FindSmallest(pArray, sizeof(pArray)/sizeof(pArray[0]));
cout<<"The smallest number in the array is "<<(*pArray + i)<<endl;
system("pause");
return 0;
}

void CreateValues (int pArray[], int numValues)
{
for (int i = 0; i < numValues; i++)
{
    cout << "Please enter value #" << i+1<< endl;
    cin >> *(pArray+i);
}
}

int FindSmallest(int pArray[], int numValues)
{

int index = 0;
int x = sizeof(pArray);
for (int i = 0; i < numValues; i++)
{
    if (pArray[i] < pArray[index])
    {

            index = i;
    }

}
return index;
}

我们将非常感谢您提供的任何帮助。干杯!!

3 个答案:

答案 0 :(得分:1)

此:

FindSmallest(pArray, numValues);

delete[] pArray;

int i = 0;
i = FindSmallest(pArray, sizeof(pArray)/sizeof(pArray[0]));

应该是这样的:

int i = 0;
i = FindSmallest(pArray, numValues);
delete [] pArray;

或者,缩短了一点:

int i = FindSmallest(pArray, numValues);
delete [] pArray;

我希望您能看到为什么在删除数组之前必须找到的最小值。

此外,sizeof(pArray)/sizeof(pArray[0])是一种仅适用于静态分配数组的技巧。

答案 1 :(得分:1)

首先,你为什么delete[] pArray在以后使用pArray

i = FindSmallest(pArray, sizeof(pArray)/sizeof(pArray[0]));

其次,您之前的FindSmallest(pArray, numValues);已经完成了查找最小值的工作,因此提到的i = FindSmallest(...)是重复/丰富的。此外,您应声明int以捕获FindSmallest()的返回值。

int min = FindSmallest(pArray, numValues);
cout << "The smallest value is: " << pArray[min];
delete[] pArray;

答案 2 :(得分:1)

请使用此代码:

int i = 0;
i = FindSmallest(pArray, numValues);
cout<<"The smallest number in the array is "<<*(pArray + i)<<endl;

sizeof(pArray)/sizeof(pArray[0])错误,因为pArray是一个指针,所以你不能使用元素编号。