#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> struct id { char name[10]; int num; int len; }ID[100]; void swap(struct id* a, struct id* b) { struct id c = *a; *a = *b; *b = c; } void sort(struct id* t, int n) { for (int i = 1; i < n; i++) { for (int j = 1; j < n - i; j++) if (strcmp(t[j].name, t[j + 1].name) > 0) swap(&t[j], &t[j + 1]); } } int main() { int n; int l; scanf("%d", &n); for (int i = 0; i <=n; i++) { scanf("%s%d", ID[i].name, &ID[i].num); ID[i].len = strlen(ID[i].name); } sort(ID, n); for (int i = 0; i <n; i++) { for (int j = 0; j <= ID[i].len; j++) { printf("%c", ID[i].name[j]); } printf(" %d", ID[i].num); printf("\n"); } return 0; }这个代码哪里错了
时间: 2023-06-20 21:06:24 浏览: 112
这个代码有两个问题:
1. 在读入数据时,应该是从 0 到 n-1 进行循环,而不是从 0 到 n。
2. 排序时,应该是从 0 到 n-i-1 进行循环,而不是从 1 到 n-i。
以下是修改后的代码:
```c
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
struct id {
char name[10];
int num;
int len;
}ID[100];
void swap(struct id* a, struct id* b) {
struct id c = *a;
*a = *b;
*b = c;
}
void sort(struct id* t, int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++)
if (strcmp(t[j].name, t[j + 1].name) > 0)
swap(&t[j], &t[j + 1]);
}
}
int main() {
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%s%d", ID[i].name, &ID[i].num);
ID[i].len = strlen(ID[i].name);
}
sort(ID, n);
for (int i = 0; i < n; i++) {
for (int j = 0; j <= ID[i].len; j++) {
printf("%c", ID[i].name[j]);
}
printf(" %d\n", ID[i].num);
}
return 0;
}
```
注意,这里在输出时,应该要在数字后面加上换行符,否则会导致格式错误。
阅读全文