2016-04-04 8 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); 

これは問題点であり問題は修正されました。ありがとうございました!別のファイルに出力

+0

'temp'、' temp2'、 'temp3'はすべて' int'変数ですが、 'double'値を割り当てて' double'値に戻します。あなたはこれらを「ダブル」にする必要があります。 'i'と' maximum'変数は 'int'のままです。 – dreamlax

+0

あなたのプログラムが何をすべきかを明確に記述していません。あなたは、「ブドウ番号ナンバーの最も低い数字」が、プログラムが何をしているのか分からない人にとって、意味があると思いますか?あなたは入力を提供していません。 – kaylum

+0

回答を無効にするように質問を編集しないでください! –

答えて

0

最初の問題はtemptemp2、そしてtemp3intですが、あなたは再割り当てdouble変数に戻って、これらの値を、次にそれらにdouble値を割り当てる、とされていることです。これらは、doubleにする必要があります。

qsort()を使ってこれらのオブジェクトを並べ替えることを検討してみることもできます。

#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); 
    } 

    // ...  
} 

あなたがselection_sort機能を使用しなければならないので、それが原因structオブジェクトが割り当て可能であることにかなり簡略化することができます。

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'関数をソースコードに追加し、main関数で' selection_sort'関数を呼び出すのではなく、私の答えにあるように 'qsort'関数を呼び出します。次に 'products'配列がソートされます。あなたの 'selection_sort'関数は必要なくなります(' strcpy'などの使用も不要です)。 '#include 'を忘れないでください。 – dreamlax

+0

@イエローバード:これらの要件をクリアして、人々が使用できない答えで時間を無駄にしないようにする必要があります。私はあなたのために私の答えを更新します。 – dreamlax

+0

@イエローバード:私は選択をソートを後方からではなく前方にしようとしていたので、ループを1から開始するように変更しました。 'struct product temp'は、一時変数を保持したり、' struct product 'の個々のメンバーを手動でコピーするのではなく、 'struct product'全体をコピーすることができるようになっています。私はあなたが名前について何を意味しているのか分からないので、私は 'struct product 'の特定の分野を意図的に言及していません。 – dreamlax

関連する問題