2014-02-12 54 views
0

我的任务是编写一个程序,询问用户他/她想要输入多少个整数。动态创建数组并接受用户的数字并将它们放入 数组。将数组传递给函数以确定输入的最小数字。打印 最小号码。在适当或可能的地方使用指针符号。我在main下的输出并不是我期望的

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

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

任何可以提供的帮助将不胜感激。干杯!!

+0

明显的是你调用'FindSmallest()'而不保存结果,然后删除数组,然后再次调用FindSmallest()(在现在被删除的数组上)。你可能应该坚持数组,而不是尝试做指针运算... – John3136

+0

你的输入和输出是什么?你期望什么? –

+0

'sizeof(pArray)/ sizeof(pArray [0])'也是错误的......你不能将它应用于指针(因为第一个'sizeof'返回指针的大小,而不是指向的大小数据,并且使用'sizeof'没有修正,因为大小只在运行时设置)。继续使用'numValues'。 –

回答

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

首先,为什么当你在后面

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

其次使用pArraydelete[] pArray,你以前FindSmallest(pArray, numValues);已经完成了寻找最小值的工作,所以提到i = FindSmallest(...)是重复/丰富。此外,您应该声明int以获得FindSmallest()的返回值。

int min = FindSmallest(pArray, numValues); 
cout << "The smallest value is: " << pArray[min]; 
delete[] pArray; 
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是一个指针,所以你熬不过元素编号。

相关问题