2017-02-28 87 views
0

我有一項任務,需要我排序任何隨機數。下面的代碼很奇怪。原因是在點擊運行程序後,如果我在開始時輸入5,它不能正常工作,但是,它可以正確地與其他數字一起工作。請幫我解決這個錯誤。我還附上了照片,以證明我上面所說的。它是代碼塊錯誤嗎?

Image when enter number 5

Image when enter number 10

#include <stdio.h> 
int main(){ 
int howmany,i,temp,swap; 

printf("Enter how many numbers you want to sort: \n"); 
scanf(" %d",&howmany); 

int number[howmany]; 

printf("*** The original numbers *** \n"); 

for (i=0;i<howmany-1 ;i++){ 
    number[i]=(rand()% 25)+1; 
    printf("Random number is: %d\n",number[i]); 
} 

while(1){ 
    swap = 0; 
    for (i=0;i<howmany-1;i++){ 
     if(number[i]>number[i+1]){ 
      temp = number[i]; 
      number[i]=number[i+1]; 
      number[i+1] = temp; 
      swap = 1; 
      } 

    } 
    if (swap == 0){ 
     break; 
    } 
} 
printf("*** The sorted numbers ***\n"); 
for (i=0;i<howmany-1;i++){ 
    printf("The sorted number: %d\n",number[i]); 


} 


} 
+1

' Lundin

+1

@Lundin但只在第一和第三個循環中。第二個是可以的(訪問'number [i + 1]')。 – mch

+0

我只用howmany(而不是howmany-1)試過它,然而,它遇到了同樣的問題,但是,編號爲4. @ –

回答

0

的問題是,因爲你正在閱讀和打印一個小於數組的實際大小。所以數組的最後一項會有一些你不知道的垃圾值。但是,排序時,你正在使用它,它被分類。有時垃圾值低於其他隨機值並被打印。

我做了修復。請檢查所有for循環。

#include <stdio.h> 
int main(){ 
int howmany,i,temp,swap; 

printf("Enter how many numbers you want to sort: \n"); 
scanf(" %d",&howmany); 

int number[howmany]; 

printf("*** The original numbers *** \n"); 

for (i=0;i<howmany ;i++){ //Read howmany values and print 
    number[i]=(rand()% 25)+1; 
    printf("Random number is: %d\n",number[i]); 
} 

while(1){ 
    swap = 0; 
    for (i=0;i<howmany-1;i++){ 
     if(number[i]>number[i+1]){ 
      temp = number[i]; 
      number[i]=number[i+1]; 
      number[i+1] = temp; 
      swap = 1; 
      } 

    } 
    if (swap == 0){ 
     break; 
    } 
} 
printf("*** The sorted numbers ***\n"); 
for (i=0;i<howmany;i++){ //Print howmany values 
    printf("The sorted number: %d\n",number[i]); 


} 


} 
+0

也許'do {...} while(swap!= 0);'雖然整個代碼部分有點尷尬... – JHBonarius

+0

@JHBonarius,你是對的!但我只是想在沒有太多優化的情況下更正代碼。 – MayurK

+0

非常感謝你@MayyrK。你太棒了!我試圖給你一個贊,但我不知道該怎麼辦! @。@ –