2014-10-14 1 views
2

아래의 main 메소드에서 나는 sort 함수를 호출하려고합니다. 그리고 함수가 사용자 입력에서 후자를 선택하면 그에 따라 정렬을 인쇄해야합니다. 종료. 하지만 나는 "루프가 최대 한 번 (루프 증분이 실행되지 않음)"이라는 문구가 array[arraySize]을 가리 키도록 경고합니다. 위의 루프에 대해 반환 형식 또는 다른 형식과 관련이 있습니까? 여기 무슨 일 이니? 누구든지 지적하고 설명해주십시오. 감사합니다!루프는 배열의 크기를 증가시키기 위해 무시합니다.

int main() 
{ 
    long array[100], arraySize; 
    char sort; 
    long maxi = 100; 

    for(arraySize = 0; arraySize < maxi; arraySize++) 
    { 
     printf("Enter any positive integer, enter 0 to stop: "); 
     scanf("%li", &num); 

     if(num < 0) { 
      arraySize--; 
      printf("I said positive!"); 
      count++; 
     } 
     else if(num == 0) { 
      maxi = arraySize; 
     } 
     else { 
      array[arraySize]=num; 
      arraySize--; 
     } 
    } 

    printf("Please enter A for ascending or D for descending order\n"); 
    scanf("%s", &sort); 

    bubble_sort(array, arraySize, sort); //calling the sort function 

    printf(" Sorted list in the selected order:\n"); 
    for (arraySize = 0; arraySize < num; arraySize++) { 
     printf("%ld \n", array[arraySize]); 
    puts(""); 
    return 0; 
    } 
} 

편집 : 모든 제안 감사합니다 모두 여기에 아래의 코드입니다. 나는 약간의 변화를 만들었고 여기에 내가 지금까지 가지고있는 것이있다. 이제 bubble_sort 기능 로직과 함께 A/D 사용자 입력을 건너 뜁니다. 다음은 최종 결과물입니다. 참고 : long num은 전역 변수로 선언되었습니다!

Output 더 이상의 제안

int main() 
{ 
    long array[100], arraySize; 
    char sort; 
    long maxim = 100; 

    for(arraySize = 0; arraySize < maxim; arraySize++) 
    { 
     printf("Enter any positive integer, enter 0 to stop: "); 
     scanf("%li", &num); 

     if(num < 0) 
     { 
      arraySize--; 
      printf("I said positive! \n"); 
      count++; 
     } 
     else if(num == 0) 
     { 
      maxim = arraySize; 
     } 
     else 
     { 
      array[arraySize]=num; //arraySize--; 
     } 
    } 

    printf("Please enter A for ascending or D for descending order: \n"); 
    scanf("%c", &sort); 

    bubble_sort(array, maxim, sort); //calling the sort function 

    printf("Sorted list in the selected order:\n"); 
    for (arraySize = 0; arraySize < maxim; arraySize++) 
    { 
     printf("%ld \n", array[arraySize]); 
    } 
    puts(""); 
    return 0; 
} 
부탁드립니다!

+2

왜 당신은'arraySize -'를 할 때마다 for 루프를 사용합니까? 정확히'arraySize ++'는 그것이 진정한 색깔임을 보여줄 것인가? 'num == 0'을 제외하고 루프를 통해 항상 같은 상태를 유지하지 않을 것인데, 그때 코드는'arraySize -'를 사용하지 않기 때문입니다. 'else' 부분은'array [arraySize] = num;'만 포함하고 그 뒤에 다른 값을 추가 할 수 있도록'arraySize'를 1 씩 증가시켜야합니다. –

+3

'char sort; .... scanf ("% s", &sort);'가 좋지 않습니다. – chux

+0

@nIcEcOw'arraySize'는 제 버블 소트 함수의 루프에서'arraySize-i'를 필요로하지 않을 때마다 그러합니다! –

답변

1

입력 된 마지막 문자는 sort에 저장되며 그 문자는 대부분 \n 일 것입니다.
scanf("%c", &sort);에서 scanf(" %c", &sort);으로 변경하면 문제가 해결됩니다. %c 앞에 공백을 적어 둡니다.

+0

이것은 나에게 전혀 발생하지 않았을 것입니다. 그것은 실제로 내가 가진 모든 문제를 해결했습니다. 정말 고맙습니다! 이 작은 실수들 각각은 저에게 큰 것을 가르쳐줍니다. :) –

3

다른 문제가 몇 가지 있지만 경고에 대해 이야기 해 보겠습니다. 이 코드는 다음과 같습니다.

for (arraySize = 0; arraySize < num; arraySize++) { 
    printf("%ld \n", array[arraySize]); 
    puts(""); 
    return 0; 
} 

수정 된 들여 쓰기는 루프가 최대 한 번만 실행되는 이유를 분명히해야합니다. 오히려 arraySize보다 맥시를 사용한다) (bubble_sort도

for (arraySize = 0; arraySize < maxi; arraySize++) { 

전화 :

+0

나는이 비슷한 프로그램에서이 루프를 사용했습니다. 괜찮아요. 나는 왜 그것이이 경고를 말하고 있는지 아직도 확신 할 수 없다. 미안 나는 아직 초급이다. –

+0

@pointing_Stack : 당신의'return 0;'이 의미하는 바를 이해합니까? –

+0

예,이 for 루프의 범위에서 이동하고 여기에 여기에 추가 할 일부 항목을 편집했습니다. –

2

인쇄 루프가 오타를 가지고 있으며,로 수정해야 보인다.

+0

변경 했는데도 문제가 해결되지 않았습니다. –

+0

루프의 'return 0'라인도 바깥쪽으로 이동했는지 확인 했습니까? –

+0

네, 저도 그렇게했습니다! –

관련 문제