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);
}
}
输出:

------解决方案--------------------
你是想按照工人的总工资从小到大排列吧?
是的话那就是你中间的冒泡排序写的有问题,而且你交换的话应该交换整个结构体的值,而不仅仅是总工资值,
否则工人跟他本身的总工资就对不上了
排序部分改为如下代码即可:
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;
}
}
}
结果如下图:

------解决方案--------------------
printf("%s %.2f\n", compare[i].name, compare[i].total);
作为一个C程序员,对
scanf,sscanf,fscanf
printf,sprintf,fprintf
这类函数的用法,还是要做到“拳不离手,曲不离口”的。
这篇博客探讨了一个C语言编程中关于结构体数组排序的问题。作者在尝试按照结构体成员`total`(即工资总和)对worker结构体数组进行冒泡排序时遇到了输出错误。解决方案指出原始代码的冒泡排序实现有误,应当交换整个结构体而不是仅仅交换总工资值。修正后的代码成功实现了按总工资排序的功能。博主强调了对输入输出函数的熟练掌握对于C程序员的重要性。
2274

被折叠的 条评论
为什么被折叠?



