c语言顺序结构的通讯录代码 最后一行总是提示有错误 用Eclipse运行 怎么都不对 求大神指教
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<windows.h>#defineM50typ...
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#define M 50
typedef struct
{
char name[20];
char sex[8];
char xuehao[11];
char telephone[10];
char address[20];
} ADDRESS;
int shuru(ADDRESS t[]);
void xianshi(ADDRESS t[], int n); /*显示记录*/
void chazhao(ADDRESS t[], int n); /*按姓名查找显示记录*/
int shanchu(ADDRESS t[], int n);
int charu(ADDRESS t[], int n);
void baocun(ADDRESS t[], int n); /*记录保存为文件*/
int duqu(ADDRESS t[]); /*从文件中读记录*/
void display(ADDRESS t[]); /*按序号查找显示记录*/
void sort(ADDRESS t[], int n); /*按姓名排序函数*/
void xuehaochazhao(ADDRESS t[]); /*按序号查找显示记录*/
void xianshidantiao(ADDRESS temp); /*显示单条记录*/
int find(ADDRESS t[], int n, char *s); /*查找函数*/
int menu_select(); /*主菜单函数*/
void sort(ADDRESS t[], int n)
{
int i, j, flag;
ADDRESS temp; /*临时变量做交换数据用*/
for (i = 0; i < n; i++)
{
flag = 0; /*设标志判断是否发生过交换*/
for (j = 0; j <i - 1; j++)
{if ((strcmp(t[j].name, t[j + 1].name)) > 0) /*比较大小*/
{
flag = 1;
strcpy(temp.name, t[j].name); /*交换记录*/
strcpy(temp.sex, t[j].sex);
strcpy(temp.xuehao, t[j].xuehao);
strcpy(temp.telephone, t[j].telephone);
strcpy(temp.address, t[j].address);
}
}
if (flag == 0)
break; /*如果标志为0,说明没有发生过交换循环结束*/
printf("sort success!!!\n");/*显示排序成功*/
}
} 展开
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#define M 50
typedef struct
{
char name[20];
char sex[8];
char xuehao[11];
char telephone[10];
char address[20];
} ADDRESS;
int shuru(ADDRESS t[]);
void xianshi(ADDRESS t[], int n); /*显示记录*/
void chazhao(ADDRESS t[], int n); /*按姓名查找显示记录*/
int shanchu(ADDRESS t[], int n);
int charu(ADDRESS t[], int n);
void baocun(ADDRESS t[], int n); /*记录保存为文件*/
int duqu(ADDRESS t[]); /*从文件中读记录*/
void display(ADDRESS t[]); /*按序号查找显示记录*/
void sort(ADDRESS t[], int n); /*按姓名排序函数*/
void xuehaochazhao(ADDRESS t[]); /*按序号查找显示记录*/
void xianshidantiao(ADDRESS temp); /*显示单条记录*/
int find(ADDRESS t[], int n, char *s); /*查找函数*/
int menu_select(); /*主菜单函数*/
void sort(ADDRESS t[], int n)
{
int i, j, flag;
ADDRESS temp; /*临时变量做交换数据用*/
for (i = 0; i < n; i++)
{
flag = 0; /*设标志判断是否发生过交换*/
for (j = 0; j <i - 1; j++)
{if ((strcmp(t[j].name, t[j + 1].name)) > 0) /*比较大小*/
{
flag = 1;
strcpy(temp.name, t[j].name); /*交换记录*/
strcpy(temp.sex, t[j].sex);
strcpy(temp.xuehao, t[j].xuehao);
strcpy(temp.telephone, t[j].telephone);
strcpy(temp.address, t[j].address);
}
}
if (flag == 0)
break; /*如果标志为0,说明没有发生过交换循环结束*/
printf("sort success!!!\n");/*显示排序成功*/
}
} 展开
1个回答
展开全部
后面排序的部分太麻烦了,而且可能排序排的不对。实际上对结构struct 而言,可以直接相等,比如ADDRESS temp;
ADDRESS t; temp = t;这样直接赋值。
因此对sort (ADRESS t[], int n);
t是一个struct数组中的首地址那么t[i]就是一个对应的struct;可以这么定义sort()函数
{
ADDRESS temp;
int index; indey;
//这里一个简单的选择排序,对t后面n个排序就行。
for(index =0; index < n;index++)
for( indey = index+1; indey < n; indey++)
if (排序的条件)
{ temp = t[index]; t[indexi] = t[indey]; t[indey] = temp;}
}
ADDRESS t; temp = t;这样直接赋值。
因此对sort (ADRESS t[], int n);
t是一个struct数组中的首地址那么t[i]就是一个对应的struct;可以这么定义sort()函数
{
ADDRESS temp;
int index; indey;
//这里一个简单的选择排序,对t后面n个排序就行。
for(index =0; index < n;index++)
for( indey = index+1; indey < n; indey++)
if (排序的条件)
{ temp = t[index]; t[indexi] = t[indey]; t[indey] = temp;}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询