2016-04-04 14 views
-5
int i, largest = 0, temp, temp2, temp3; 






      temp1 = products[n-1].name; 

      strcpy(products[n-1].name,products[largest].name); 

      strcpy(products[largest].name, temp1); 

Bunlar sorunun nedenleriydi ve sorun giderildi, yardımlarınız için teşekkürler!Başka bir dosyada çıktı

+0

'temp',' temp2' ve 'değişkenler int' tüm' temp3', ama onlara 'double' değerleri atamak ve sonra geri double' değerlere' oradan da tekrar atayın. Bunları çifte yapmalısın. “I” ve “en büyük” değişkenler “int” olarak kalabilir. – dreamlax

+0

Programınızın ne yapması gerektiğini açıkça belirtmediniz. "Üzüm numarası en düşük sayı" nın, programın ne yapması gerektiğini bilemeyen birine çok anlamlı geldiğini düşünüyor musunuz? Ve sen girişi vermedin. – kaylum

+0

Lütfen soruları cevapları geçersiz kılacak şekilde düzenlemeyin! –

cevap

0

ilk sayısı temp, temp2 ve temp3int, ama yeniden atama double değişkenlere geri bu değerleri sonra onlara double değerler atayarak ve olmasıdır. Bunları double yapmalısınız.

Bu nesneleri sıralamak için qsort() kullanmayı düşünebilirsiniz.

#include <stdlib.h> // for qsort 

int compare_products(const void *p1, const void *p2) 
{ 
    const struct product *product1 = p1; 
    const struct product *product2 = p2; 

    // swap product1 and product2 around to reverse sort order 
    return (int)(product1->sale_volume - product2->sale_volume); 
} 

int main() 
{ 
    // ... 

    qsort(products, line_amount, sizeof(struct product), compare_products); 

    for(i = 0; i < line_amount; i++){ 
     fprintf(pFile, "%s \t %lf \t %lf \t %lf\n", products[i].name, products[i].unit_price, products[i].tot_pounds_sold, products[i].sale_volume); 
    } 

    // ...  
} 

Eğer selection_sort işlevi kullanmak zorunda olduğundan

, bunun nedeni atanabilir olmak struct nesnelere biraz daha basit hale getirilebilir.

void selection_sort(struct product products[], int n) 
{ 
    int i, largest = 0; 

    if (n == 1) { 
     return; 
    } 

    for (i = 0; i < n; i++) { 
     if (products[i].sale_volume > products[largest].sale_volume) { 
      largest = i; 
     } 
    } 

    struct product temp = products[n - 1]; 
    products[n - 1] = products[largest]; 
    products[largest] = temp; 

    selection_sort(products, n - 1); 
} 
+0

@YellowBird: 'compare_products' işlevini kaynak kodunuza ekleyin ve ana işlevinizde' selection_sort' işlevini çağırmak yerine, cevabımdaki gibi qsort işlevini çağırın. Sonra 'ürünler' diziniz sizin için sıralanır. 'Selection_sort' işlevine ihtiyaç duyulmayacaktır (strcpy' vb.). # # 'nolu bağlantıyı unutmayın. – dreamlax

+0

@YellowBird: İnsanların zamanlarını kullanılamaz cevaplarla boşa harcamamaları için bu gereksinimleri açıkça belirtmelisiniz. Cevabımı sizin için güncelleyeceğim. – dreamlax

+0

@YellowBird: Oops Döngüyü 1'den başlayarak değiştirdim, çünkü seçimin geriye doğru değil, ileriye doğru sıralamaya çalışıyorum. Yapı ürünü temp'i, geçici değişkenleri korumak ve "struct ürününün" bireysel üyelerini el ile kopyalamak yerine, bütün bir struct ürününü ona kopyalayabilmem için. İsim hakkında ne kastettiğinizden emin değilim, gereksiz herhangi bir yapısal ürün türüne atıfta bulunmuyorum, çünkü gereksizdir. – dreamlax