标题:修改一下.还差一步了,只能显示最长的名字,其它的不能显示.
取消只看楼主
yuchin
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2010-5-7
结帖率:100%
已结贴  问题点数:20 回复次数:3 
修改一下.还差一步了,只能显示最长的名字,其它的不能显示.
#include<stdio.h>
#include<string.h>


struct book
{
        char name[10];
        float price;
}
        pers[10];

void change(void);
void print_book(void);
void putinbook(void);

void main()
{   
        putinbook();
        print_book();               
        change();
        printf("That's ok!\n");
       system("pause");
}

void print_book(void)
{
        int i;
        printf("the first turn:\n");
        for(i=0;i<10;i++)
        printf("%s\t%g\n",pers[i].name,pers[i].price);
}

void putinbook(void)
{
        int i;
        printf("Please input 10 books name,price:\n");
        for(i=0;i<10;i++)
        scanf("%s %f",pers[i].name,&pers[i].price);
}
void change(void)
{
        int i,finish,j;
        float min;
        char minname[10];
        char ove[100];
        printf("the turn after sort:\n");
        printf("book name\tbook price\n");
        for(i=0;i<10;i++)
        {
             finish=1;
             for(j=0;j<10;j++)
             {
                 if(pers[j].price<pers[j+1].price)
                 {
                      min=pers[j].price;
                      pers[j].price=pers[j+1].price;
                      pers[j+1].price=min;
                      strcpy(minname,pers[j].name);
                      strcpy(pers[j].name,pers[j+1].name);
                      strcpy(pers[j+1].name,minname);
                      finish=0;
                 }
                 if(pers[j].price==pers[j+1].price)
                 {
                     
                     if(strcmp(pers[j].name,pers[j+1].name)<0)
                    {
                        ove[100]=pers[j].price;
                        pers[j].price=pers[j+1].price;
                        pers[j+1].price=ove[100];
                        strcpy(pers[j].name,pers[j+1].name);
                        strcpy(pers[j+1].name,ove);
                        finish=0;
                    }
                 }
                 
                 
             }
             if(finish==1)   
             break;
        }
        for(i=0;i<10;i++)
        printf("%s\t\t%g\n",pers[i].name,pers[i].price);
}
搜索更多相关主题的帖子: change 名字 
2011-01-16 17:59
yuchin
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2010-5-7
得分:0 
回复 2楼 qq1023569223
问题应该不是那么简单,我用9和10效果一样.我觉得问题出在这.
程序代码:
                    if(strcmp(pers[j].name,pers[j+1].name)<0)
                    {
                        ove[100]=pers[j].price;
                        pers[j].price=pers[j+1].price;
                        pers[j+1].price=ove[100];
                        strcpy(pers[j].name,pers[j+1].name);
                        strcpy(pers[j+1].name,ove);
                        finish=0;
                    }
但我已经能力到限了,找不出来问题.
本来是10个书名,结果只输出了最长的那个,剩下的都是空名.
2011-01-16 18:28
yuchin
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2010-5-7
得分:0 
回复 2楼 qq1023569223
我的思路是如果price相同,就用名字长短来排序.
2011-01-16 18:31
yuchin
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2010-5-7
得分:0 
回复 5楼 qq1023569223
可以了。我假期也该把书好好再看看了。
谢谢你。
2011-01-16 18:38



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-331162-1-1.html




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

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