跪求大神指点:fatal error C1016: #if[n]def expected an identifier

qq_35403224 2016-06-27 10:26:08
# include<stdio.h>
# include<malloc.h>
# include<stdlib.h>
# include<string.h>
# include<iostream.h>
# ifndef 0
# define InsertSort
# endif
# define LEN sizeof(list)
# define MAX sizeof(SqList)
//读取数据

typedef struct teacher
{
int n;
char name[20];//姓名(name )
char city[20];//城市(city)
char phone[20];//电话(tel)
char qq[20];//QQ号(qq)
struct teacher * next;
}
list;
void create(list *&head);
void insert(list *&head);//插入函数
void scanfdata(list *p0);//输入数据
void datawrite(list *head,FILE *fp);//写入文件
void print(list *head);//输出信息
void serch(list *head );//查找
void load(list *&head);//链表建立
void del(list *&head);//删除结点
void change(list *head );//修改信息
SqList;
void ShellInsert(SqList &L,int dk);//排序


void main()
{
list *head=NULL;//头指针初始化
FILE *fp;//定义文件指针
int m;//功能代号码
do{
printf("\n #############################请选择################################\n");
printf(" # 1、信息输入 ");
printf(" 2、显示信息 #\n");
printf(" # 3、查找姓名 ");
printf(" 4、删除信息 #\n");
printf(" # 5、修改信息 ");
printf(" 6、打开通讯录 #\n");
printf(" # 7、添加信息 ");
printf(" 8、 保存 #\n");
printf(" # 9、清屏 ");
printf(" # 11、排序 ");
printf(" 0、退出 #");
printf("\n ###################################################################\n");
printf(" 提示:信息输入和添加信息时最好存入字符,否则,在打开存储文件时,可能会出现乱码!\n");
printf("==输入要执行的功能代号:_");
scanf("%d",&m);
switch(m)
{
case 1:create(head);break;
case 2:print(head); break;
case 3:serch(head); break;
case 4:del(head); break;
case 5:change(head);break;
case 6:load(head);break;
case 7:insert(head);break;
case 11:ShellInsert(SqList &L,int dk);break;
case 8:datawrite(head,fp);printf("==保存成功==\n");break;
case 9:system("cls");break;

}
}
while(m!=0);
}

//链表建立函数
void create(list *&head)
{
list *p0,*p1,*p2;//定义指针
int m;//作为判断是否继续新建的条件
FILE *fp;
p0=(list *)malloc(LEN); //开辟一个新单元
p0->next=NULL;//结点指针域为空
head=p0;//第一个结点,即为头结点
printf("请输入信息建立通讯录:\n");
getchar();
scanfdata(p0);//输入数据
p2=p0;
printf("是否继续按1输入,按0结束_");
scanf("%d",&m);
while(m)
{
getchar();
p1=(list *)malloc(LEN); //开辟一个新单元
p1->next=NULL;
p2->next=p1;
scanfdata(p1);//输入数据
p2=p1;
head->n = head->n+1;//表长
printf("是否继续按1输入,按0结束_");
scanf("%d",&m);
}
if(m==0)
{
datawrite(head,fp);//把信息存到相应文件
}
}
//尾插入新建
void insert(list *&head)
{
list *p,*q;
p=head;
while(p->next)
p=p->next;//遍历到最后一个结点
printf("新建:\n");
q=(list *)malloc(LEN);//为新节点开辟内存单元
q->next=NULL;//新节点的指针域为空
getchar();
scanfdata(q);//为新结点输入数据
p->next=q; //建立链表,插入末尾
head->n = head->n+1;//表长
printf("==建立完成-注意保存==\n");
}
//写入信息
void scanfdata(list *p0)
{
printf("名字: ");
gets(p0->name);
printf("城市: ");
gets(p0->city);
printf("电话: ");
gets(p0->phone);
printf("QQ: ");
gets(p0->qq);
printf("\n");
}
//将数据写入文件
void datawrite(list *head,FILE *fp)
{
list *p0;//定义移动指针
p0=head;
fp=fopen("通讯录.ini","w+"); /*打开名字为tongxinglu.dat的文件,打开方式为只写*/
while(p0!=NULL)
{
fwrite(p0,sizeof(list),1,fp);//写入数据
p0=p0->next;
}
fclose(fp); //关闭打开的文件
}

void load(list *&head)
{
FILE *fp;//定义文件指针
char ch;//存储从文件中读取的字符
char lujing[20];
int read;
list *p1,*p2,*p3;
printf("输入打开通讯录得路径:\n");
printf("例如:c:\\新建文件夹\\通讯录.ini\n请输入:_");
scanf("%s",lujing);
fp=fopen(lujing,"r");//按照输入的路径打开相应文件
if(fp==NULL)//没有打开,输出提示信息
{
printf("错误:打不开文件或文件不在\n");
exit(0);
}
ch=fgetc(fp);//判定通讯录是否为空
if(ch==EOF)
printf("===通讯录空===\n");
p2=p1=head;
while(p1!=NULL)
{
p2=p1;
p1=p1->next;
free(p2);
}//次循环目的是能多次打开通讯录
head=NULL;
while(!feof(fp))//当fp还没结束的时候read
{
p1=(list *)malloc(LEN);//开辟一个新单元
p1->next=NULL;
read=fread(p1,sizeof(list),1,fp);
//fscanf(fq,"%s%s%s%s\n",&p1->name,&p1->city,&p1->phone,&p1->qq);
if(head==NULL)//如果原来的链表是空表
{
head=p1;/*p1->next=NULL;*/
p2=head;
}//P1指向的结点作为头结
else
{
p2->next=p1;
p2=p1;
}//插到最后的结点之后
}fclose(fp);
print(head);//调用显示函数输出通讯录
printf("\n通讯录打开成功\n");
} //插入函数的子函数从键盘写数据
//显示函数
void print(list *head)
{
list *p; //定义移动指针
int i;
char *menu[]={"姓名","城市","电话", "QQ"};
p=head;
printf("--------------------------------------------------------------------\n");
for(i=0;i<4;i++)
printf("%-20s",menu[i]);
printf("\n");
if (head!=NULL)
while(p)
{
printf("%-20s",p->name);
printf("%-20s",p->city);
printf("%-20s",p->phone);
printf("%-20s",p->qq);
printf("\n");
p=p->next;
}
else
printf("不好意思,列表为空\n");
printf("--------------------------------------------------------------------\n");
}
//查找函数
void serch(list *head )
{
list *p1,*p2;//定义临时指针变量
char check_name[20];//定义存储查找人的姓名
printf("请输入要查找的姓名\n");
scanf("%s",check_name);//输入要查找的人的姓名
if(head==NULL)
{
printf("\n不好意思,列表为空\n");
}
p1=head;
while(p1!=NULL &&strcmp(check_name,p1->name)!=0)/*p1指向的不是所要找的结点,后面还有*/
{
p2=p1;
p1=p1->next;
} //p1后移一个结点
if(p1!=NULL && strcmp(check_name,p1->name)==0) //找到了用strcmp比较两个字符串
{
printf(" 姓名: %s ",p1->name);
printf(" 城市: %s ",p1->city);
printf(" 电话: %s ",p1->phone);
printf(" QQ : %s ",p1->qq);
printf("\n");
}//输出结点数据
else
printf("\n没有%s的通讯信息\n",check_name); //否则提示没有此人的通讯信息
}
//删除结点
void del(list *&head)
{
list *p1,*p2;//定义临时指针
char delname[20];//保存要删除人的姓名
FILE *fp;//文件指针
int i;
printf("请输入要删除人的姓名:");
scanf("%s",delname);//输入要删除人的姓名
if(head==NULL)//如果头指针为空,则输出提示语:通讯录为空
{
printf("\n ====通讯录为空====\n");
}
p1=head; //通讯录不为空时,把头指针赋值给p1
while(p1&&(i=strcmp(delname,p1->name))) /*p1指向的不是所要找的结点,且p1不是最后一个结点*/
{
p2=p1; //保存前驱结点地址
p1=p1->next; //p1后移一个结点
}
if(i==0) //找到了用strcmp比较两个字符串
{
printf("删除人为:%s\n",p1->name);
if(p1==head)
{
head=p1->next; //若p1指向的是首结点,指第二个结点的地址给P1
}
else
{
p2->next=p1->next;//修改指针域
}
head->n=head->n-1; printf("刚刚删除的是:%s\n",delname); //提示刚才删除的人的姓名
free(p1); //把此人的信息所占内存释放
datawrite(head,fp); //重新写入文件保存
}
else if(p1==NULL)
printf("\n姓名为%s的通讯信息没有被找到!\n",delname); //否则没有找到此人
}
//修改函数
void change(list *head )
{
list *p1,*p2; //定义临时指针变量
char change_name[20]; //定义存储修改人的姓名数组
FILE *fp; //文件指针
printf("请输入要修改的姓名\n");
scanf("%s",&change_name); //输入要修改的人的姓名
getchar();
if(head==NULL)
{
printf("\n不好意思,列表为空\n");
}
p1=head;
while(p1!=NULL &&strcmp(change_name,p1->name)!=0) //p1不是要找的名字,而且后面还有
{
p2=p1;
p1=p1->next;
} //p2=p1后面如果要用到P1时会起到作用
if(p1!=NULL && strcmp(change_name,p1->name)==0)
{
scanfdata(p1); //调用输入函数重新输入
datawrite(head,fp); //把改好的信息重新写到文件里去,改变原文件记录
}
else
printf("\n%s没有被找到\n",change_name);
}
void ShellInsert(SqList &L,int dk){
for (i=dk+1;i<=L.length;++i)
if(LT(L.r[i].key,L.r[i-dk].key)){
L.r[0]=L.r[i];
for(j=i-dk;j>0&<(L.r[0].key,L.r[j].key);j-=dk)
L.r[j+dk]=L.r[j];
L.r[j+dk]=L.r[0];
}
}
...全文
690 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 版主 2016-06-28
  • 打赏
  • 举报
回复
宏的名字同样遵循变量的名字的原则,你不能用0作为宏的名字
「已注销」 2016-06-28
  • 打赏
  • 举报
回复
#if 0
#if !0
#if ABC
#if !ABC
#ifdef ABC
#ifndef ABC
小灸舞 2016-06-28
  • 打赏
  • 举报
回复
if[n]def expected an identifier
说明# ifndef 0有问题
不要用0,换个别的

而且你另外也有不少问题,比如第32行:SqList;??什么鬼

64,645

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧