2016-04-28 94 views
0

我想排序基于数组的值的数组的字符串,出于某种原因排序部分工作..当我尝试排序元素相互关联并打印出来,出于某种原因打印出来的数字非常随意排序与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++; 
} 
} 

谢谢!

+2

请不要编写这样的代码。你必须尊重你的同伴,编写这样一个不可读的代码并不完全是这样。使用更多的空白空间和更清晰的声明。 –

+0

'j = i; (i <= size) if((i> = 0) if(gender [i] =='m')':note last last validata index is'i_1' – BLUEPIXY

+0

'while(i <= size) if平均值[i + 1]>平均值[i])':超出界限。 – BLUEPIXY

回答

0

这不是一个有效的排序。您将一个元素泡泡到适当的位置。查找冒泡排序:它有两个循环。内部循环移动当前元素,外部循环遍历所有剩余的未分类元素。

另请参阅您发布的其他评论以了解更多错误。

+0

工作很好!谢谢! – Whiteheart

+0

有一件事,即时通讯面临与女性/男性总的另一个问题...你能看到缺陷吗? – Whiteheart

1

我想排序您已经应用似乎是错在你的排序功能的第一个条件

while(i<=size) 
{ 
    if(average[i+1]>average[i]) 
     { 
      temp=average[i]; 

假设条件时,我是等于大小,然后平均[I + 1]将点没有任何关于你的东西可以说零值,你不设置。 所以试图纠正这个代码

for(i=0;i<n;i++) 
    { 
    for(k=0;k<n-i-1;k++) 
    { 
    if(a[k]>a[k+1]) 
     { 
     temp=a[k]; 
     a[k]=a[k+1]; 
     a[k+1]=temp; 
     } 
    } 
    } 

这是冒泡排序,你总是比迭代最后一传少一个。 更多see here

+0

修正了它!谢谢你的帮助! – Whiteheart