2016-03-18 10 views
0

Ich möchte nur wissen, was falsch ist und wie es zu beheben ist.Was ist los mit meinem ersten 'c' Bubble Sortierprogramm?

Es sieht aus wie alles, was richtig ist, aber wenn Sie die EXE-Datei ausführen abstürzen es jedes Mal,

#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

Zunächst einmal - was lässt Sie glauben, dass irgendetwas nicht in Ordnung ist? Wenn Sie nicht so ein wichtiges Detail angeben ... eine Beschreibung dessen, was passieren sollte und was stattdessen geschieht, berauben Sie sich potentieller Antworten, weil die Leute einfach weiterziehen. Zweitens zeigt ein kurzer Code-Scan, dass Sie sich nicht bewusst sind, dass ein C-Array bei 0 nicht 1 indiziert wird. Daher überspringen alle Ihre "for" -Schleifen wie "for" (l = 1) das erste Element (und verwenden möglicherweise ein (das Element über das Ende des gültigen Puffers hinaus) – mah

+0

es war vorgesehen, das erste Element zu überspringen, die maximale Anzahl der zu ordnenden Elemente ist 100 nicht 101, das Element 0 wird im gesamten Algorithmus –

+0

übersprungen, wenn Sie 'T [100]' deklarieren , Ihre gültigen Elemente sind die Indizes 0 bis 99. Daher haben Sie nur 100 Elemente und müssen mit 0 beginnen. – mah

Antwort

0

Sie sind nicht scanf und das Bestehen der array-function richtig verwenden.

Bitte ändern Sie diese Zeilen in Ihrem Code wie folgt und Ihr Programm wird wie erwartet funktionieren.

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

Hoffe, das hilft.

+1

Beachte auch, dass es wahrscheinlich eine gute Idee wäre, sicherzustellen, dass' n' nicht größer ist das maximale Größe des Puffers, noch ist es <= 0. – mah

+0

Es war ein großer Fehler, ich änderte es, aber immer noch diese drei Fehler: Übergabe Argument 1 von 'T_filling' macht Zeiger von Ganzzahl ohne Besetzung [-Wint-Konvertierung] und zu viele Argumente für Format [-Wformat-Extra-Args] und erwartet 'int *' aber Argument ist vom Typ 'Int' –

+0

@mah ja, du hast Recht, ich werde die Antwort –