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);
これは問題点であり問題は修正されました。ありがとうございました!別のファイルに出力
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);
これは問題点であり問題は修正されました。ありがとうございました!別のファイルに出力
最初の問題はtemp
、temp2
、そしてtemp3
はint
ですが、あなたは再割り当て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);
}
@YellowBird: 'compare_products'関数をソースコードに追加し、main関数で' selection_sort'関数を呼び出すのではなく、私の答えにあるように 'qsort'関数を呼び出します。次に 'products'配列がソートされます。あなたの 'selection_sort'関数は必要なくなります(' strcpy'などの使用も不要です)。 '#include
@イエローバード:これらの要件をクリアして、人々が使用できない答えで時間を無駄にしないようにする必要があります。私はあなたのために私の答えを更新します。 – dreamlax
@イエローバード:私は選択をソートを後方からではなく前方にしようとしていたので、ループを1から開始するように変更しました。 'struct product temp'は、一時変数を保持したり、' struct product 'の個々のメンバーを手動でコピーするのではなく、 'struct product'全体をコピーすることができるようになっています。私はあなたが名前について何を意味しているのか分からないので、私は 'struct product 'の特定の分野を意図的に言及していません。 – dreamlax
'temp'、' temp2'、 'temp3'はすべて' int'変数ですが、 'double'値を割り当てて' double'値に戻します。あなたはこれらを「ダブル」にする必要があります。 'i'と' maximum'変数は 'int'のままです。 – dreamlax
あなたのプログラムが何をすべきかを明確に記述していません。あなたは、「ブドウ番号ナンバーの最も低い数字」が、プログラムが何をしているのか分からない人にとって、意味があると思いますか?あなたは入力を提供していません。 – kaylum
回答を無効にするように質問を編集しないでください! –