typedef struct sort { char s; int a; }sort; int main() { int b,d,i,j; char e; scanf("%d",&b); sort c[b]; for (i=0;i<b;i++) { scanf("%s",&c[i].s); scanf("%d",&c[i].a); } for (i=0;i<b;i++) { for (j=0;j<n-1;j++) { if (c[j].a<c[j+1].a || (c[j].a==c[j+1].a && strcmp(c[j].s,c[j+1].s)==1)) { d=c[j].a; c[j].a=c[j+1].a; c[j+1].a=d; e=c[j].s; c[j].s=c[j+1].s; c[j+1].s=e; } } } for (i=0;i<b;i++) { printf("%s %d\n",c[i].s,c[i].a); } }
时间: 2024-01-20 16:03:08 浏览: 68
好的,下面是修改后的代码:
```c
#include <stdio.h>
#include <string.h>
typedef struct sort {
char s;
int a;
} sort;
int main() {
int b, d, i, j;
char e;
scanf("%d", &b);
sort c[b];
for (i = 0; i < b; i++) {
scanf(" %c", &c[i].s); // 修改1:使用%c读取单个字符,并加上空格忽略回车符
scanf("%d", &c[i].a);
}
for (i = 0; i < b; i++) {
for (j = 0; j < b - 1 - i; j++) { // 修改2:修正内层循环的循环变量
if (c[j].a < c[j + 1].a || (c[j].a == c[j + 1].a && strcmp(&c[j].s, &c[j + 1].s) > 0)) { // 修改3:使用strcmp比较字符串大小
d = c[j].a;
c[j].a = c[j + 1].a;
c[j + 1].a = d;
e = c[j].s;
c[j].s = c[j + 1].s;
c[j + 1].s = e;
}
}
}
for (i = 0; i < b; i++) {
printf("%c %d\n", c[i].s, c[i].a); // 修改4:使用%c输出单个字符
}
return 0;
}
```
主要修改如下:
1. 在读取字符时,使用 `%c` 格式化字符串读取单个字符,并在前面加上空格忽略回车符。
2. 在排序时,修正内层循环的循环变量为 `b - 1 - i`。
3. 在比较字符串大小时,使用 `strcmp` 函数比较两个字符。
4. 在输出字符时,使用 `%c` 格式化字符串输出单个字符。
另外,根据 C 语言标准,结构体中的数组大小不能使用变量定义,因此使用变量定义结构体数组 `c` 是不合法的。可以使用动态内存分配来解决这个问题,或者使用预编译指令定义一个常量来定义数组大小。
阅读全文