2012-06-13 88 views
0

我已經編寫了一個C程序來執行冒泡排序,但在執行它時IDE會掛起。 這是爲什麼發生?代碼如下:Turbo C在執行C冒泡排序程序時掛起

#include<stdio.h> 
    main() 
    { 
      int i[3],temp,n,x; 
      printf("Enter 4 positive numbers"); 
      for(n=0;n<=3;n++) 
      { 
       scanf("%d",&i[n]); 
      } 
      recheck: 
      for(x=0;x<=2;x++) 
      { 
       if(id[x]>i[x+]) 
       { 
       temp=i[x]; 
       i[x]=i[x+1]; 
       i[x+1]=temp; 
       } 
      } 
      if(i[0]>i[1]&&i[1]>i[2]&&i[2]>i[3]) 
      { 
       for(n=0;n<=3;n++) 
       { 
         printf("%d",i[n]); 
       } 
      } 
      else 
      { 
       goto recheck; 
      } 
      getche(); 
} 
+4

Turbo C真的還存在嗎? –

+6

'int i [3]'只有3個元素。我[2]是最後一個。 –

+1

詮釋我[3]有3個元素,你正在閱讀4從用戶 – obo

回答

0

此代碼有4個錯誤。

1)您聲明變量爲i[3]。所以它只需要三個值。從i[0]i[2]。你正在閱讀四個值。所以數組被限制爲三個,它不能讀取四個值。如果您想讀取四個值,則將i[3]更改爲i[4]

2)if(id[x]>i[x+])。這條線有兩個錯誤。這裏您使用的是id[x]。但沒有聲明爲id[]的變量。它應該是i[x]。第二個是i[x+]。這不是一個有效的聲明。它應該是i[x++]

3)您按升序對值進行排序並按降序檢查它們。 所以這導致了一個錯誤。改變if(i[0]>i[1]&&i[1]>i[2]&&i[2]>i[3])if(i[0]<i[1]&&i[1]<i[2]&&i[2]<i[3])或更改if(id[x]>i[x+])if(id[x]<i[x+])

4您正在使用goto聲明在你的代碼。但goto不被優先考慮,因爲它是一種錯誤的編程習慣。無需任何函數調用就可以轉發或恢復執行過程。這不符合結構化編程方法。所以不要更喜歡goto聲明。 您可以使用兩個for()循環輕鬆解決此問題。

+0

對不起theres沒有id我打錯it.its只有我 – Ananthakrishna

+0

並感謝您的幫助 – Ananthakrishna

6

你應該總是複製粘貼你的代碼。你提供的代碼有一些錯別字,甚至不會編譯。

忽視錯別字有三個主要問題:

  1. int i[3]只有3個要素。 i[3]超出限制,訪問它可能會導致意外的結果。

  2. 當按照升序順序交換元素時,但在檢查數組是否完全排序時,按降序排列。

  3. 您正在使用嚴格的不等式來檢查數組是否已排序。如果有兩個相同的元素,這將不起作用。

+0

謝謝。我不知道它應該是4,因爲我認爲它從0,1,2,3個位置開始 – Ananthakrishna