2014-02-12 100 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是一個指針,所以你熬不過元素編號。

相關問題