2017-02-03 3 views
0

음수에 대해 배열을 검사 한 다음 값을 반환하는 함수를 만들었습니다. 첫 번째 매개 변수는 int testArray[]이고 배열 크기는 int n=14입니다. 배열을 사용하기 위해 for 루프를 사용했습니다. if 문을 사용하여 testArray[i]<0을 비교하고 else 문을 사용하여 음수가 발견되지 않았다는 메시지를 출력합니다. 코드는 오류없이 컴파일되지만 출력이 없습니다.함수의 흐름 제어에 대한 경고

In function 'int countNegative(int*, int)': 28:1: warning: control reaches end of non-void function [-Wreturn-type]

나는 그것이 매개 변수가 함수에 전달되는 방식에 문제가 될 수 있다고 생각 : 나는 경고를 얻을.

#include <iostream> 
    #include <cstdlib> 
    using namespace std; 

    int countNegative(int testArray[],int n); 

    int main(){ 
     int testArray[] = {-2,0,44,12,-45,17,934,-21,67,88,91,1,0,6}; 
     int n = 14; 

     countNegative(testArray,n); 

     system("PAUSE"); 
     //EXIT_SUCCESS; 
     return 0; 
    } 

    int countNegative(int testArray[],int n){ 
     for(int i=0; i<n; i++){ 
      if(testArray[i]<0){ 
       int index = testArray[i]; 
       return index; 
      } 
      else{ 
       cout << "No Negative Numbers"; 
      } 
     } 
    } 

답변

0

countNegative 기능에 여러 가지 문제가 있습니다. testArray의 음의 값을 계산하고 음의 값의 전체 수를 반환하는 것처럼 기능 명으로부터

int countNegative(int testArray[],int n){ 
    for(int i=0; i<n; i++){ 
     if(testArray[i]<0){ 
      int index = testArray[i]; // <= You are returning value here, not the index in the array. 
      return index; 
     } 
     else{ 
      cout << "No Negative Numbers"; 
      // No return here, should have returned 0 ? 
     } 
    } 
    // No return here ? 
} 

, 그것은 보인다.

왜이 경고 메시지가 표시됩니까?

testArray에는 음수가 없다고 가정하기 때문입니다. 이 경우 아무 것도 반환하지 않습니다. 즉, 반환 값없이 귀하의 컨트롤이 귀하의 else 문에도 도달 할 수 있습니다. 컨트롤은 거기에서 값을 반환하지 않고 함수의 끝에 도달 할 수도 있습니다. 반환 유형을 int로 표시 했으므로 이러한 모든 조건에서 정수 값을 반환해야합니다.

내가 이해하는 것이 맞다면 배열을 반복하고 총 음수 항목 수를 계산하도록 함수를 리팩터링해야합니다. 마지막으로, 그 값을 반환 할 수 있습니다.

int countNegative(int testArray[],int n){ 
     int total_negatives = 0; 
     for(int i=0; i<n; i++){ 
      if(testArray[i]<0){ 
       total_negatives++; 
      } 
     } 
     if (total_negatives == 0) cout << "No Negative numbers\n"; 
     return total_negatives; 
    } 

complete-program

0

함수 호출에서 반환 값을 받으려면 int 변수가 있어야합니다. 작성된 코드는 배열에있는 첫 번째 음수의 첫 번째 인덱스 만 반환합니다. 음수가 필요하다면 즉시 반환하면 안됩니다. 또한 배열에 음수 값이 없으면 아무 것도 반환하지 않으며 음수 값이 없다는 메시지 만 인쇄하면 배열의 모든 항목에 대해 해당 값이 인쇄되는 방식으로 인쇄됩니다 .

나는 이것을 이렇게 다시 작성합니다. 이 함수는 배열에서 발견 된 음수의 수를 반환하거나 음수가없는 경우 0을 반환합니다.

int countNegative(int testArray[],int n){ 
    int negs = 0; 

    for(int i=0; i<n; i++){ 
     if(testArray[i]<0){ 
      negs++; 
     } 
    } 

    return (negs); 

} 

그리고 당신은이 같은 기본 기능을 변경해야합니다.

int main(){ 
    int testArray[] = {-2,0,44,12,-45,17,934,-21,67,88,91,1,0,6}; 
    int n = 14; 
    int foundNegatives = countNegative(testArray,n); 
    if (! foundNegatives) { 
     cout << "No Negative Numbers"; 
    } 

    system("PAUSE"); 
    //EXIT_SUCCESS; 
    return 0; 
} 
관련 문제