c语言 log输出结构体,c语言结构体语法没错输出产生有关问题

这篇博客探讨了一个C语言编程中关于结构体数组排序的问题。作者在尝试按照结构体成员`total`(即工资总和)对worker结构体数组进行冒泡排序时遇到了输出错误。解决方案指出原始代码的冒泡排序实现有误,应当交换整个结构体而不是仅仅交换总工资值。修正后的代码成功实现了按总工资排序的功能。博主强调了对输入输出函数的熟练掌握对于C程序员的重要性。

c语言结构体语法没错输出产生问题求助

#define _CRT_SECURE_NO_WARNINGS

#include 

#define num 5

struct worker

{

char name[20];

float salary1;

float salary2;

float salary3;

float total;

};

void main()

{

int i, j;

float k;

structworker compare[num] = { { "brad", 213.6f, 22.3f, 24.5f,}, { "rtio", 140.6f, 34.3f, 67.5f, }, { "uio", 763.6f, 56.3f, 89.5f, }, { "bithch", 45.6f, 22.3f, 12.5f, }, { "idre", 453.6f, 22.3f, 12.5f, } };

for (i = 0; i <5; i++)

{

compare[i].total = compare[i].salary1 + compare[i].salary2 + compare[i].salary3;

}

for (i = 0; i <5; i++)

{

for (j = 0; j <5- i; j++)

{

if (compare[i].total>compare[j].total)

{

k =compare[i].total;

compare[i].total =compare[j].total;

compare[j].total =k;

}

}

}

for (i= 0; i<5; i++)

{

printf("%s %f\n", compare[i].name, compare[i].total);

}

}

输出:

120847140.png

------解决方案--------------------

你是想按照工人的总工资从小到大排列吧?

是的话那就是你中间的冒泡排序写的有问题,而且你交换的话应该交换整个结构体的值,而不仅仅是总工资值,

否则工人跟他本身的总工资就对不上了

排序部分改为如下代码即可:

worker workerTemp;

for (i = 0; i <4; i++)

{

for (j = 0; j <4- i; j++)

{

if (compare[j].total>compare[j+1].total)

{

workerTemp =compare[j];

compare[j]=compare[j+1];

compare[j+1]=workerTemp;

}

}

}

结果如下图:

120847141.jpg

------解决方案--------------------

printf("%s %.2f\n", compare[i].name, compare[i].total);

作为一个C程序员,对

scanf,sscanf,fscanf

printf,sprintf,fprintf

这类函数的用法,还是要做到“拳不离手,曲不离口”的。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值