2017-01-15 5 views
1

나는이 평균 계산기 프로그램을 코드 블록에서 실행하려고 시도했지만 오류없이 빌드되지만 어떤 이유로 든 실행할 수 없으며 그 이유를 모른다. 내 코드왜이 프로그램을 실행하지 않습니까?

#include <iostream> 

    using namespace std; 

double getAverage(int amount, int numbers[]) { 
    // Declare the variables 
    int total = 0; 
    double avg = 0; 
    //Find each number in the array then add it to the total 
    for (int i = amount; i > 0; i--) { 
    total += numbers[i]; 

    } 
    //Divide the total by the amount to get the average 
    avg = total/amount; 
    cout << "The Average is: "; 
    //Return the average 
    return avg; 
} 

int main() { 
    // Declare the variables and arrays 
    int varNum = 1; 
    int totVar; 
    int userNums[totVar]; 
    //Ask user for how many variables they want then record it 
    cout << "How many variables would you like to have? "; 
    cin >> totVar; 
    //Ask the user for each variable, then record it into the array 
    for (int i = totVar; i > 0; i--) { 
    cout << "Please input variable " + varNum; 
    cin >> userNums[i]; 
    varNum++; 

    } 
    return 0; 
} 
+2

배열'userNums'를 만들기 전에'totVar'를 초기화하십시오. – Stefan

+0

나를 위해 구축되지 않습니다. –

+4

userNums를 std :: vector로 선언하면 많은 문제를 해결할 수 있습니다. – stefaanv

답변

1

999 이내 여야하지 않습니다. 처음으로인데, @stefan이 말한 것처럼 totVar은 배열 크기로 사용될 때 초기화되지 않았습니다. 그러나 이것은 중요하지 않습니다. 두 번째, int userNums[totVar];은 합법적이지 않으므로 C++입니다 (GCC 확장으로 컴파일 됨). 그리고 셋째 그 루프 배열에

for (int i = totVar; i > 0; i--) { 
    cout << "Please input variable " + varNum; 
    cin >> userNums[i]; 
    varNum++; 
} 

for (int i = amount; i > 0; i--) { 
    total += numbers[i]; 
} 

무효 패스 인덱스. 크기 N의 배열에는 0에서 N-1까지 유효한 인덱스가 있습니다. 첫 번째 루프를 통과하는 첫 번째 패스는 numbers[totVar]이며 배열의 끝 부분에 있습니다. 첫 번째와 같은 루프를 작성하는 일반적인 방법이 numbers[0], numbers[1], ... numbers[totVar-1]에서 값을 액세스

for (int i = 0; i < totVar; ++i) 
    cin >> userNums[i]; 

입니다.

두 번째 루프도 똑같이하십시오.

+0

Ahum .. 좋은 점에 대해서'int userNums [totVar]', 나는 그것을 약간의 C#으로 혼합하고 있었다고 생각한다. 여기에 답변 점수 보너스를받을 자격이 있습니다. – Stefan

+0

고맙습니다. 이것은 확실히 많은 도움이되었습니다. – PeteMcGreete

1

아래 참조입니다 : @Pete 베커

당신은 당신이 배열 userNums

를 만들기 전에 totVar를 초기화해야 실제 대답을 당신이

를 사용하는 것처럼

나중에 소프트웨어에 upp를 줄 수 있습니다. 어 바운드.

int userNums[1000]; 

그리고 확인 totVar이 코드 문제가 있습니다

+0

감사합니다.하지만 배열은 초과 된 모든 데이터를 0으로 채 웁니까? 예를 들어 배열에 16 개의 데이터를 넣으면 배열의 초과 공간을 0으로 채 웁니까? – PeteMcGreete

+0

@PeteMcGreete 아니요, 그렇지 않습니다. 배열을 초기화하고 싶다면'int userNums [1000] = {}; '이라고 쓰면됩니다. –

+0

감사합니다. 그것은 많은 도움이됩니다. – PeteMcGreete