| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 685 人关注过本帖
标题:这排序法,为什么运行结果无效==
只看楼主 加入收藏
黑漆漆
Rank: 2
等 级:论坛游民
帖 子:31
专家分:48
注 册:2014-11-4
结帖率:100%
收藏
已结贴  问题点数:15 回复次数:11 
这排序法,为什么运行结果无效==
如题,此函数是用于对 多个字符串 排序,#define LEN 15  每次运行都无法实现排顺序,哪儿错了啊?

void Sort(void){
    int a=0,b=0;
    char c[LEN];
   
    for(a=0;a<=i;a++){
    strcpy(c,student[0].id);
    for(b=0;b<=i-a;b++)
        if(strcmp(c,student[b].id)<=0)
            strcpy(c,student[b].id);
            
            for(b=0;b<i-a;b++)
                if(student[b].id==c)
                    break;
        strcpy(student[b].id,student[i-a].id);
        strcpy(student[i-a].id,c);
    }
    printf("Sort data successful!");
}
搜索更多相关主题的帖子: 字符串 
2014-12-23 21:08
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:15 
sort函数的形参为void 返回值也是void

sort函数中的变量i未定义(是不是i应该写成LEN啊)
student[]也未定义(可能是结构体数组?)
难不成i和student[]都是全局变量?

c你定义成了字符数组也就是字符串,是当成个中间的临时变量了么?
strcpy(c, student[0].id);这一句是不是该改成
strcpy(c, student[a].id); ???

我只是猜你的意图 有点难啊

Only the Code Tells the Truth             K.I.S.S
2014-12-23 22:16
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
对于字符串排序  我主张是使用指针来排序 (对指针进行排序) 而不是使用strcpy 这个函数在你的代码中出现 就标志着是一个失败的代码

DO IT YOURSELF !
2014-12-24 09:14
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
而且你的代码无上下文  只能靠猜

DO IT YOURSELF !
2014-12-24 09:15
黑漆漆
Rank: 2
等 级:论坛游民
帖 子:31
专家分:48
注 册:2014-11-4
收藏
得分:0 
回复 2楼 longwu9t
不好意思   主要是太长   我补上吧
2014-12-25 10:58
黑漆漆
Rank: 2
等 级:论坛游民
帖 子:31
专家分:48
注 册:2014-11-4
收藏
得分:0 
回复 4楼 wp231957
恩恩   那你看下整个程序嘛
2014-12-25 10:58
黑漆漆
Rank: 2
等 级:论坛游民
帖 子:31
专家分:48
注 册:2014-11-4
收藏
得分:0 
#include<stdio.h>
#include<string.h>

#define MAX_PARTS 35
#define LEN 15

struct part{
    char name[LEN];
    char id[LEN];
    char email[LEN];
}student[MAX_PARTS];

int i=0;//全局变量i,用于记录录入信息的条数

void Find(void);//函数声明
void Insert(void);
void Delete(void);
void Sort(void);
void Print(void);

int main(void)
{
    int command;
   
    for(;;){
    printf("Enter command:");//指令调用
    scanf("%d",&command);
   
    if(i>34) {
        printf("it's full");
    }
   
    switch(command){
        case 0:Find();   break;//函数调用
        case 1:Insert();  break;
        case 2:Delete();   break;
        case 3:Sort();   break;
        case 4:Print();  break;
        case 5:return 0;
        default: printf("Illegal aommands\n");
    }
    printf("\n");
  }
}

void Find(void){//查找
    char c[LEN];
    int a=0;
    printf("Enter names or students_id or email address:");
    scanf("%s",&c);
    for(a;a<=i;a++){
        if(strcmp(c,student[a].name)==0||strcmp(c,student[a].id)==0||strcmp(c,student[a].email)==0)
        {
            printf("%-15d",a);
            printf("%-15s",student[a].name);
            printf("%-15s",student[a].id);
            printf("%-15s",student[a].email);
            break;
        }
    }
    if(a>i)
        printf("No such record");
}

void Insert(void){//录入
    printf("Enter name:\n");
    scanf("%s",&student[i].name);
    printf("Enter student id:\n");
    scanf("%s",&student[i].id);
    printf("Enter email:\n");
    scanf("%s",&student[i].email);
    i++;
}

void Delete(void){//删除
    int a,b;
    printf("Enter index of record to be deleted<0-%d>:",i-1);
    scanf("%d",&a);
    b=a+1;
    for(b;b<=i;b++){
        strcpy(student[a].name,student[b].name);//用后面的将前面的覆盖
        strcpy(student[a].id,student[b].id);
        strcpy(student[a].email,student[b].email);
        a++;
    }
    i--;
}

void Sort(void){//就是它有问题==
    int a=0,b=0;
    char c[LEN];
   
    for(a=0;a<=i;a++){
    strcpy(c,student[0].id);
    for(b=0;b<=i-a;b++)
        if(strcmp(c,student[b].id)<=0)
            strcpy(c,student[b].id);
            
            for(b=0;b<i-a;b++)
                if(student[b].id==c)
                    break;
        strcpy(student[b].id,student[i-a].id);
        strcpy(student[i-a].id,c);
    }
    printf("Sort data successful!");
}

void Print(void){//输出
    int x=0;
    char a[LEN]="Index",b[LEN]="Name",c[LEN]="Student Id",d[LEN]="Email";
    printf("%-15s",a);
    printf("%-15s",b);
    printf("%-15s",c);
    printf("%-15s\n",d);
    for(x;x<i;x++){
    printf("%-15d",x);
    printf("%-15s",student[x].name);
    printf("%-15s",student[x].id);
    printf("%-15s\n",student[x].email);
    }
}

[ 本帖最后由 黑漆漆 于 2014-12-25 11:13 编辑 ]
2014-12-25 10:59
黑漆漆
Rank: 2
等 级:论坛游民
帖 子:31
专家分:48
注 册:2014-11-4
收藏
得分:0 
===

[ 本帖最后由 黑漆漆 于 2014-12-25 11:09 编辑 ]
2014-12-25 10:59
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
struct part { //直接定义结构体数组的话 part这个变量名也就没有必要了


    scanf("%s", &c); //&要去掉

    for(a; a <= i; a++) { //a; 改成a=0;或者直接;
    for(b; b <= i; b++) { //同上面的a一样的问题
    for(x; x < i; x++) { //同上

    scanf("%s", &student[i].name);  //建议改成  fgets(student[i].name, LEN, stdin);
    scanf("%s", &student[i].id);    //同上
    scanf("%s", &student[i].email); //同上

   
    另有两处用到scanf
    最好紧跟着清一下stdin
    加上一句
    fflush(stdin);


改了上面这些后 程序可以编译不报警了
但是生成的程序并不能得到正确结果

这么长的代码 还请高手大神们帮助楼主吧

Only the Code Tells the Truth             K.I.S.S
2014-12-25 15:57
黑漆漆
Rank: 2
等 级:论坛游民
帖 子:31
专家分:48
注 册:2014-11-4
收藏
得分:0 
===
2014-12-25 18:03
快速回复:这排序法,为什么运行结果无效==
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.104560 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved