#include <stdio.h>#include <stdlib.h>#include <string.h>struct person{ char name[20]; unsigned long id; int salary;};int main(void){ struct person arr[3]; int i=0,j=0; int n=sizeof(arr)/sizeof(arr[0]); memset(arr,0,sizeof(arr)); printf("请输入%d个数据:\n",n); for ( i = 0; i < n; i++) { scanf("%s %u %d",&arr[i].name,arr[i].id,&arr[i].salary); } for(i=0;i<n;i++) { printf("%s %u %d\n",arr[i].name,arr[i].id,arr[i].salary); } for(i=0;i<n-1;i++) { for(j=0;j<n-i-1;j++) { if(arr[j].salary<arr[j+1].salary) { struct person tmp; tmp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=tmp; } } } printf(" \n"); for(i=0;i<n;i++) { printf("%s %u %d\n",arr[i].name,arr[i].id,arr[i].salary); } return 0
输入的&和%u不对,把id的&加到name上了,字符串不需要加&
unsigned long 要用%lu
scanf("%s %lu %d",arr[i].name,&arr[i].id,&arr[i].salary);
printf("%s %lu %d\n"
简单看了一眼,细节有点问题,代码大概没有问题,结构体这种复合结构的交换要注意细节。