2017-05-20 1 views
0

zeigen Also im Grunde möchte ich Nummer in Datei sortieren. so dass ich zuerst lesensortierende Struktur in C kann Ausgabeergebnis in VS2017 nicht zeigen, aber in CodeBlocks

for (int i = 0; i < count; i++) { 
     fscanf(read_file, "%d %s %d %s\n", &custid_temp[i].id, custid_temp[i].name, &custid_temp[i].reward_point, custid_temp[i].promo); 
     printf("%d %s %d %s\n", custid_temp[i].id, custid_temp[i].name, custid_temp[i].reward_point, custid_temp[i].promo); 
    } 

die Datei bestehen aus dieser:

1 Test 200 WELCOME2017 
2 James 700 WELCOME2017 

Sehen Sie es die Punkte ist, 200 und 700 in Dateien, ich will aufsteigend sortieren (der größten zur kleinsten) werden wie dies:

2 James 700 WELCOME2017 
1 Test 200 WELCOME2017 

Also werde ich die Datei mit dieser Funktion sortieren:

for (int i = 0; i<count+1; i++) 
    { 
     for (int j = 0; j<count - i; j++) 
     { 
      if (custid[j].reward_point <custid[j + 1].reward_point) 
      { 
       struct customer temp_sort = custid[j]; 
       custid[j] = custid[j + 1]; 
       custid[j + 1] = temp_sort; 
      } 
     } 
    } 
drucken

Und schließlich die aktualisierte Struktur:

for (int i = 0; i < count; i++) { 
     printf("%d %s %d %s\n", custid[i].id, custid[i].name, custid[i].reward_point, custid[i].promo); 
    } 

Das Ergebnis ist dieses (VS2017):

1 Test 200 WELCOME2017 
2 James 700 WELCOME2017 
0 0 
0 0 

Das Ergebnis ist dieser (Codeblock):

1 Test 200 WELCOME2017 
2 James 700 WELCOME2017 
2 James 700 WELCOME2017 
1 Test 200 WELCOME2017 

Process returned 2 (0x2) execution time : 0.015 s 
Press any key to continue. 

Wie zwei kommen Compiler produziert 2 verschiedene Ergebnisse, sogar mit dem gleichen Code, gibt es eine Lösung dafür auf VS2017 zu arbeiten?

Danke für die Zeit sowieso.

+1

Der Debugger ist dein Freund. – Olaf

+0

'custid [j + 1]' gilt außerhalb der Grenzen. – BLUEPIXY

+0

Visual Studio und CodeBlocks sind IDEs, keine Compiler. Visual Studio verwendet entweder "cl.exe" von Microsoft oder eine modifizierte Version von Clang. CodeBlocks können eine Vielzahl von Compilern AFAIK unterstützen. – InternetAussie

Antwort

0

Versuchen Sie, das Sortierproblem allgemeiner anzugehen. Definieren Sie eine Reihenfolge, indem Sie eine Komparatorfunktion implementieren, um entscheiden zu können, ob ein Element kleiner, gleich oder größer als ein anderes Element ist. Definieren Sie eine Funktionsschnittstelle, die Ihr Array und einen Funktionszeiger zu Ihrem Vergleicher führt (indem Sie zwei Elemente Ihres Arrays als Parameter nehmen und -1, 0 oder 1 für kleinere, gleiche oder größere Werte zurückgeben).

Verwenden Sie schließlich Quicksort oder einen anderen bekannten Algorithmus, um die eigentliche Sortierung durchzuführen. Entscheiden Sie, ob die Reihenfolge tot sein soll - eine Eigenschaft, die wünschenswert ist, wenn Ihr Sortieralgorithmus deterministische Ergebnisse zurückgeben soll.

Genauer gesagt würde ich die Verwendung von qsort aus der C-Standard-Bibliothek empfehlen. Es ist ziemlich gut dokumentiert: http://www.gnu.org/software/libc/manual/html_node/Search_002fSort-Example.html