C语言函数问题

imonkeyi 2018-03-22 09:48:06
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Number//单链表结构体结点
{
int a;
struct Number *next;
};
int main()
{
/*
函数声明,Insert()是插入函数,Delete()是删除函数,Research()是查询函数
InsertSort()是插入排序函数
*/
void Insert(struct Number *first,int x);
void Delete(struct Number *first,int x);
void Research(int *arr,int n,int x,struct Number *first);
void InsertSort(int *arr,int n);
int n,x;
char ch;
int i;
struct Number *first=(struct Number *)malloc(sizeof(struct Number));//头结点,初始化头结点
first->a=0;
first->next=NULL;
while(scanf("%d",&n)!=EOF)
{
int *arr=(int *)malloc(sizeof(int)*(n+1));//用一个数组来放与x异或的值,初始化
memset(arr,0,sizeof(int)*(n+1));
for(i=0;i<n;i++)
{
scanf(" %c %d",&ch,&x);
switch(ch)
{
case '+': Insert(first,x);break;
case '-': Delete(first,x);break;
case '?': Research(arr,n,x,first);break;
}
}
printf("%d\n",arr[1]);
}
}
void Insert(struct Number *first,int x)
{
struct Number *p=first;
while(p!=NULL)
{
p=p->next;
}
struct Number *s=(struct Number *)malloc(sizeof(struct Number));
s->a=x;
p=s;
s->next=NULL;
}
void Delete(struct Number *first,int x)
{
struct Number *q=first;
struct Number *p=q->next;
while(p!=NULL)
{
if(p->a==x)
{
q->next=p->next;
free(p);
return;
}
q=q->next;
p=p->next;
}
}
void Research(int *arr,int n,int x,struct Number *first)
{
InsertSort(int *arr,int n);
int i=1;
struct Number *p=first;
while(p!=NULL)
{
arr[i]=p->a^x;//与链表中的每个数异或求最大值
p=p->next;
i++;
}
InsertSort(arr,n);//排序,是数组第一个数为最大值
}
void InsertSort(int *arr,int n)
{
int i,j;
for(i=2;i<=n;i++)
{
arr[0]=arr[i];
for(j=i-1;arr[j]<arr[0];j--)
arr[j+1]=arr[j];
arr[j+1]=arr[0];
}
}


我已经声明了为什么说我没声明函数?
IDE错误说明
||=== Build file: "no target" in "no project" (compiler: unknown) ===|
D:\codeblocks\poj\online j.c||In function 'Research':|
D:\codeblocks\poj\online j.c|68|warning: implicit declaration of function 'InsertSort' [-Wimplicit-function-declaration]|
D:\codeblocks\poj\online j.c|14|note: previous declaration of 'InsertSort' was here|
D:\codeblocks\poj\online j.c|68|error: incompatible implicit declaration of function 'InsertSort'|
D:\codeblocks\poj\online j.c|14|note: previous implicit declaration of 'InsertSort' was here|
D:\codeblocks\poj\online j.c|68|error: expected expression before 'int'|
||=== Build failed: 2 error(s), 1 warning(s) (0 minute(s), 0 second(s)) ===|
...全文
401 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
donjin9 2018-03-23
  • 打赏
  • 举报
回复
函数还能在main中声明啊?
imonkeyi 2018-03-23
  • 打赏
  • 举报
回复
引用 2 楼 paschen 的回复:
Research函数中,把InsertSort(int *arr, int n);改成:void InsertSort(int *arr, int n); 要有返回类型,这才算一个函数声明
回答到点子上了,改了之后就编译成功了,是我太粗心了,谢谢
paschen 2018-03-22
  • 打赏
  • 举报
回复
Research函数中,把InsertSort(int *arr, int n);改成:void InsertSort(int *arr, int n); 要有返回类型,这才算一个函数声明
自信男孩 2018-03-22
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct Number
{
	int a;
	struct Number *next;
};

/*
   函数声明,Insert()是插入函数,Delete()是删除函数,Research()是查询函数
   InsertSort()是插入排序函数
 */
void Insert(struct Number *first,int x);
void Delete(struct Number *first,int x);
void Research(int *arr,int n,int x,struct Number *first);
void InsertSort(int *arr,int n);

int main()
{
	int n,x;
	char ch;
	int i;
	struct Number *first=(struct Number *)malloc(sizeof(struct Number));//头结点,初始化头结点
	first->a=0;
	first->next=NULL;
	while(scanf("%d",&n)!=EOF)
	{
		int *arr=(int *)malloc(sizeof(int)*(n+1));//用一个数组来放与x异或的值,初始化
		memset(arr,0,sizeof(int)*(n+1));
		for(i=0;i<n;i++)
		{
			scanf(" %c %d",&ch,&x);
			switch(ch)
			{
				case '+': Insert(first,x);break;
				case '-': Delete(first,x);break;
				case '?': Research(arr,n,x,first);break;
			}
		}
		printf("%d\n",arr[1]);
	}
}
void Insert(struct Number *first,int x)
{
	struct Number *p=first;
	while(p!=NULL)
	{
		p=p->next;
	}
	struct Number *s=(struct Number *)malloc(sizeof(struct Number));
	s->a=x;
	p=s;
	s->next=NULL;
}
void Delete(struct Number *first,int x)
{
	struct Number *q=first;
	struct Number *p=q->next;
	while(p!=NULL)
	{
		if(p->a==x)
		{
			q->next=p->next;
			free(p);
			return;
		}
		q=q->next;
		p=p->next;
	}
}
void Research(int *arr,int n,int x,struct Number *first)
{
	//InsertSort(int *arr,int n);
	int i=1;
	struct Number *p=first;
	while(p!=NULL)
	{
		arr[i]=p->a^x;//与链表中的每个数异或求最大值
		p=p->next;
		i++;
	}
	InsertSort(arr,n);//排序,是数组第一个数为最大值
}

void InsertSort(int *arr, int n)
{
	int i,j;
	for(i=2;i<=n;i++)
	{
		arr[0]=arr[i];
		for(j=i-1;arr[j]<arr[0];j--)
			arr[j+1]=arr[j];
		arr[j+1]=arr[0];
	}
}
参考一下吧 函数声明建议放在函数外,不建议放在main函数内,这样只会让main函数逻辑更乱。 若被调用函数在调用函数之下,建议在调用函数外,前面提前声明一下即可。

69,370

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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