结构

14号选手 2012-11-03 06:08:34
以下是所写代码
#include <stdio.h>
#include <string.h>
//sepecifiled structure model
typedef struct
{
char code[4];//记录代码
char name[10];//记录名称
int price;//单价
int number;//数量
long money;//金额总和
}R;
R a[4];
R *p[4];

int main(void)
{
int n,i,j;
R *temp;
printf("请输入你要输入的记录组数:\n");
scanf("%d",&n);
getchar();
//输入记录的情况
for(i=0;i<n;i++)
{
printf("请输入第%d条记录:\n",i+1);

scanf("%d%d%ld",&a[i].price,&a[i].number,&a[i].money);
p[i]=&a[i];
}
//对记录的名称进行排序
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(strcmp(p[j]->code,p[j+1]->code)>0)
{
temp=p[j];
p[j]=p[j+1];
p[j+1]=temp;
}
else
if(p[j]->money<p[j+1]->money)
{
temp=p[j];
p[j]=p[j+1];
p[j+1]=temp;
}
}
}
//输出记录
printf("记录输出如下所示:\n");
for(i=0;i<n;i++)
printf("%s,%s,%d,%d,%ld\n",p[i]->code,p[i]->name,p[i]->price,p[i]->number,p[i]->money);
//金额总和进行排序
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
if(p[j]->money>p[j+1]->money)
{
temp=p[j];
p[j]=p[j+1];
p[j+1]=temp;
}
//输出最大金额的记录名称
printf("%s\n",p[n-1]->code);
return 0;
}

输出之后是这样的

但是在p106(m001,m106也是一样的)之后就应该是逗号啊,为什么后面的字符串又重复输出了,调试了好几遍都是这样,各位高手帮忙解答下
...全文
124 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
14号选手 2012-11-04
  • 打赏
  • 举报
回复
引用 6 楼 wujiewujiang 的回复:
char code[4];//记录代码 这个有问题,可以吧数组大小 改大点比如char code[10];//记录代码 出问题的原因在于,你输入的大小填满了数组,没地方放结尾符,%s是以字符窜输出,也就是一'\0'结尾的字符,没遇到结尾符,他会一直输出知道遇到为止。
恩,已经解决了,谢了
14号选手 2012-11-04
  • 打赏
  • 举报
回复
引用 1 楼 zhuankeshumo 的回复:
你题目都没看清楚 是分组求金额最大值的 今天我也做的 考了文件读写 但是没看(以前老师也怎么讲,反正我也不用C语言)
是你没懂意思吧??? 我只是把算法写出来而已 明明是比较记录代码,相同的就比较金额(降序排列),最后找出最大金额的记录代码 你是不是根本就没有看题目啊
swing07 2012-11-03
  • 打赏
  • 举报
回复
楼主记得给分哦
swing07 2012-11-03
  • 打赏
  • 举报
回复
char code[4];//记录代码 这个有问题,可以吧数组大小 改大点比如char code[10];//记录代码 出问题的原因在于,你输入的大小填满了数组,没地方放结尾符,%s是以字符窜输出,也就是一'\0'结尾的字符,没遇到结尾符,他会一直输出知道遇到为止。
14号选手 2012-11-03
  • 打赏
  • 举报
回复
修改加上去了
#include <stdio.h>
#include <string.h>
//sepecifiled structure model
typedef struct
{
    char code[4];//记录代码
    char name[10];//记录名称
    int price;//单价
    int number;//数量
    long money;//金额总和
}R;
R a[4];
R *p[4];
 
int main(void)
{
    int n,i,j;
    R *temp;
    printf("请输入你要输入的记录组数:\n");
    scanf("%d",&n);
    getchar();
    //输入记录的情况
    for(i=0;i<n;i++)
    {
        printf("请输入第%d条记录:\n",i+1);
 
        scanf("%s%s%d%d%ld",a[i].code,a[i].name,&a[i].price,&a[i].number,&a[i].money);
        p[i]=&a[i];
    }
    //对记录的名称进行排序
    for(i=0;i<n-1;i++)
    {
        for(j=0;j<n-1-i;j++)
        {
            if(strcmp(p[j]->code,p[j+1]->code)>0)
            {
                temp=p[j];
                p[j]=p[j+1];
                p[j+1]=temp;
            }
            else
                if(p[j]->money<p[j+1]->money)
                {
                    temp=p[j];
                    p[j]=p[j+1];
                    p[j+1]=temp;
                }
        }
    }
    //输出记录
    printf("记录输出如下所示:\n");
    for(i=0;i<n;i++)
        printf("%s,%s,%d,%d,%ld\n",p[i]->code,p[i]->name,p[i]->price,p[i]->number,p[i]->money);
    //金额总和进行排序
    for(i=0;i<n-1;i++)
        for(j=0;j<n-1-i;j++)
            if(p[j]->money>p[j+1]->money)
            {
                temp=p[j];
                p[j]=p[j+1];
                p[j+1]=temp;
            }
    //输出最大金额的记录名称
    printf("%s\n",p[n-1]->code);
    return 0;
}
14号选手 2012-11-03
  • 打赏
  • 举报
回复
引用 3 楼 startservice 的回复:
scanf("%d%d%ld",&a[i].price,&a[i].number,&a[i].money); code和name缺少输入?
已经修改了
startservice 2012-11-03
  • 打赏
  • 举报
回复
scanf("%d%d%ld",&a[i].price,&a[i].number,&a[i].money); code和name缺少输入?
newtee 2012-11-03
  • 打赏
  • 举报
回复
没遇到难题 但是文件读写让我躺着也中枪 //输入记录的情况 for(i=0;i<n;i++) { printf("请输入第%d条记录:\n",i+1); scanf("%d%d%ld",&a[i].price,&a[i].number,&a[i].money); p[i]=&a[i]; }有问题吧!
newtee 2012-11-03
  • 打赏
  • 举报
回复
你题目都没看清楚 是分组求金额最大值的 今天我也做的 考了文件读写 但是没看(以前老师也怎么讲,反正我也不用C语言)

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧