2014-02-12 1 views
0

내 임무는 그/그녀가 enter.Dynamically 배열을 생성하고 사용자의 숫자를 받아들이고으로 그들을 배치 할 얼마나 많은 정수 사용자를 요청하는 프로그램을 작성하는 것입니다 기대 나는 것이 아니다 배열입니다. 입력 된 가장 작은 수를 판별하기 위해 배열을 함수에 전달하십시오. 최소 숫자를 인쇄하십시오. 적절하거나 가능한 포인터 표기법을 사용하십시오.주에서 내 출력은 내가

나는 배열과 포인터 표기법의 사용을 이해하고있다. (나는 언제나 배울 열망이다.) 그러나 주 기능의 출력은 내가 기대하는 바가 아니거나 어쩌면 그럴 것이다. 내가 무엇을 기대해야하고 그것을 깨닫지 못하고 있는지. 여기에 내가 지금까지 무엇을 가지고 있지만 사용자가 입력 한 배열에서 가장 작은 값을 출력하는 데 막혔습니다.

#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

이 : 조금 더 단축,

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

나 :

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

을 당신이 가장 작은을 찾아 왜 당신이 볼 수 있기를 바랍니다

FindSmallest(pArray, numValues); 

delete[] pArray; 

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

이 있어야한다 값이 인 경우 전에 배열을 삭제하십시오.

또한, sizeof(pArray)/sizeof(pArray[0])는 정적으로 할당 된 배열을 위해 일하는 트릭이다. 왜 둘째

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

나중에 pArray 당신 delete[] pArray를 사용하는 것

1

우선, 이전 FindSmallest(pArray, numValues); 이미 최소 값을 찾는 작업을 수행하기 때문에 언급 i = FindSmallest(...)이 풍부한/중복입니다. 또한 을 반환 값 FindSmallest()을 catch하도록 선언해야합니다. pArray 포인터이기 때문에

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

sizeof(pArray)/sizeof(pArray[0])이 잘못 때문에 요소 수는 두지 :

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

은이 코드를 사용하시기 바랍니다.