2016-03-18 53 views
0

我只是想知道它有什麼問題,以及如何解決它。我的第一個'c'泡泡排序程序有什麼問題?

看起來每一件事情是正確的,但是當你運行.exe它你沒有使用scanf並傳遞到array正確function崩潰每次

#include <stdio.h> 
#include <stdlib.h> 

// first list filling function: 

void T_filling(int T[],int n){ 
    int i; 
    for(i=1 ;i<=n ;i++){ 
     printf("enter the number:",i+1); 
     scanf("%d",&T[i]); 
    } 
} 

//then the main algorithm: 

int main() 
{ 
    int j,k,l; 
    int n,x; 
    // you can order up to 100 integer number 

    int T[100]; 
    printf("This program is to order numbers decreasingly\n"); 
    printf("how many numbers you want to order?\n"); 

    // scanning the number of elements in the list 

    scanf(n); 
    //filling the list 
    T_filling(T[100],n); 
    //bubble sort Algorithm 
    for(j=1;j<=n-1;j++){ 
     for(k=1;k<=n-j;k++){ 
      if(T[k+1]>T[k]){ 
       x=T[k]; 
       T[k]=T[k+1]; 
       T[k+1]=x; 
      } 
     } 
    } 
    for(l=1;l<=n;l++){ 
     //printing the result on screen 
     printf("%d;",T[l]); 
    } 
    printf("\n"); 
    system("pause"); 
    return 0; 
} 
+1

首先 - 什麼讓你覺得它有什麼不對?通過不提供這樣一個重要的細節......描述應該發生什麼以及發生了什麼,你會剝奪自己潛在的答案,因爲人們會繼續前進。其次,一個簡短的代碼掃描表明,你似乎沒有意識到C數組索引從0開始,而不是1,所以你所有的'for'循環比如'for(l = 1')都跳過了第一個元素(並且可能正在使用元素超出有效緩衝區的末尾) – mah

+0

它用於跳過第一個元素,最大元素數量爲100而不是101,在整個算法中跳過0元素 –

+0

當您聲明'T [100]'時, ,您的有效元素是索引0到99.因此,您只有100個元素,並且您必須以0開頭。 – mah

回答

0

請按照以下步驟在您的代碼中修改這些行,並且您的程序將按預期工作。

scanf("%d", &n); 
//filling the list 
while(n > 100) 
{ 
    printf("Exceeding size, please re enter the size"); 
    scanf("%d", &n); 
} 
T_filling(T,n); 

希望這會有所幫助。

+1

注意,確保'n'不大於該最大的緩衝區大小,也不是<= 0。 – mah

+0

這是一個巨大的錯誤,我改變了它,但仍然是這三個錯誤: 傳遞'T_filling'的參數1使得整型指針沒有投射[-Wint-conversion]和 格式[-Wformat-extra-args]和 預期'int *'的參數太多,但參數的類型爲'int' –

+0

@mah是的,你說得對,我會更新答案 –