配列の値に基づいて配列に関連する文字列をソートしようとしていますが、何らかの理由でソート部分が動作しています。相互に関連して、いくつかの理由のためにそれらを印刷し、印刷は非常にランダムにcの文字列配列に関連する配列をソートする
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int sorting(char name[][10],double average[],int size);
int main()
{
double sales1[10],sales2[10],sales3[10],average[10],test,totalm=0,totalfm=0,test2;
int i=0,j;
char name[10][10],gender[10];
printf("Please input the name, the gender, and the sales for the\nfirst three months followed by a spacebar after each element\n");
scanf("%s %c %lf %lf %lf",&name[0],&gender[0],&sales1[0],&sales2[0],&sales3[0]);
average[i]=(sales1[i]+sales2[i]+sales3[i])/3;
while(strcmp(name[i],"enough")!=0)
{
i++;
printf("Please input the name, the gender, and the sales for the\nfirst three months followed by a spacebar after each element\n");
scanf("%s %c %lf %lf %lf",&name[i],&gender[i],&sales1[i],&sales2[i],&sales3[i]);
average[i]=(sales1[i]+sales2[i]+sales3[i])/3;
}
sorting(name,average,i);
j=i;
while(i>=0)
{
if(gender[i]=='m')
totalm=totalm+average[i];
else
totalfm=totalfm+average[i];
i--;
}
while(j>=0)
{
test2=strcmp(name[j],"enough");
if(test2!=0)
printf("%s\t%f\n",name[j],average[j]);
j--;
}
printf("total male sales are %f\n",totalm);
printf("total female sales are %f\n",totalfm);
}
int sorting(char name[][10],double average[], int size)
{
int i=0;
double temp;
char ntemp[20][20];
while(i<=size)
{
if(average[i+1]>average[i])
{
temp=average[i];
strcpy(ntemp[i],name[i]);
average[i]=average[i+1];
strcpy(name[i],name[i+1]);
average[i+1]=temp;
strcpy(name[i+1],ntemp[i]);
}
i++;
}
}
おかげで出てきます!
このようなコードは書かないでください。あなたは仲間を尊敬しなければなりませんし、そのようなコードを書くことはまさにそうではありません。より多くの空白とよりきれいな宣言を使用してください。 –
'j = i; 一方(I> = 0) { 場合(性別[I] == 'M') ':最後の有効なデータインデックスを注意'のI - 1 ' – BLUEPIXY
'(iは<=サイズ)しながら { 場合(平均[i + 1]>平均[i]) ':範囲外です。 – BLUEPIXY