【发布时间】:2016-03-11 08:09:02
【问题描述】:
实际上,我想根据名称(按字母顺序)对整个记录进行冒泡排序。但编译器给出“无效数组赋值”的错误。 请检查下面给出的代码,尤其是气泡排序部分。
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
struct form {
char name[20], employ[20], gend[20], email[20], father[20];
int num, serial;
} a[11];
main() {
int c, tmp, d;
for (c = 0; c < 10; c++) {
printf("Employ#:");
scanf("%d", &a[c].serial);
printf("Enter Name:");
scanf("%s", &a[c].name);
printf("\n");
printf("Enter Father Name:");
scanf("%s", &a[c].father);
printf("\n");
printf("Enter Email.Id:");
scanf("%s", &a[c].email);
printf("\n");
printf("Enter employment#:");
scanf("%s", &a[c].employ);
printf("\n");
printf("Enter Gender:");
scanf("%s", &a[c].gend);
printf("\n");
printf("Enter Number:");
scanf("%d", &a[c].num);
printf("\n");
}
//Bubblesorting
int i, j, temp;
for (j = 0; j < 10; j++) {
for (i = 0; i < 10; i++) {
if (a[i].name[0] < a[i + 1].name[0]) {
a[10].serial = a[i].serial;
a[10].name = a[i].name;
a[10].father = a[i].father;
a[10].email = a[i].email;
a[10].employ = a[i].employ;
a[10].gend = a[i].gend;
a[10].num = a[i].num;
a[i].serial = a[i + 1].serial;
a[i].name = a[i + 1].name;
a[i].father = a[i + 1].father;
a[i].email = a[i + 1].email;
a[i].employ = a[i + 1].employ;
a[i].gend = a[i + 1].gend;
a[i].num = a[i + 1].num;
a[i + 1].serial = a[10].serial;
a[i + 1].name = a[10].name;
a[i + 1].father = a[10].father;
a[i + 1].email = a[10].email;
a[i + 1].employ = a[10].employ;
a[i + 1].gend = a[10].gend;
a[i + 1].num = a[10].num;
}
}
}
system("cls");
printf("\nEmployee#\tName\tFather Name\tEmail\t\t\a[10]loyement#\tGender\tContact#");
for (c = 0; c < 10; c++) {
printf("\n\t%d\t", a[c].serial);
printf("%s\t", a[c].name);
printf(" %s\t", a[c].father);
printf("%s\t", a[c].email);
printf("\t%s\t", a[c].employ);
printf("%s\t", a[c].gend);
printf("%d\t", a[c].num);
}
getch();
}
【问题讨论】:
-
这篇文章真是一团糟。你甚至不能选择一种语言?让代码几乎不可读?
-
错误消息生成到代码的哪一行?你检查了那行代码吗?
-
请检查冒泡排序的逻辑并告诉我错误。
-
在这一行,a[10].name = a[i].name;
-
@kikkaz69 首先,您可以交换整个结构,而不是一次交换每个元素。如果你这样做了,那么你就摆脱了字符串复制错误。然后,修复冒泡排序本身。
标签: c struct structure bubble-sort