代码错误求解答

qq_35153501 2016-12-01 12:09:39
代码如下
#define n 10
#define m 10
#define minisize 100
struct
{
float address;
float length;
int flag;
}used_table[n];
struct
{
float address;
float length;
int flag;
}free_table[m];

allocate(J,xk)
char J;
float xk;
{
int i,k;
float ad;
k=-1;
for(i=0;i<m;i++)
if(free_table[i].length>=xk&&free_table[i].flag==1)
if(k==-1||free_table[i].length<free[k].length)
k=i;
if(k==-1)
{
cout<<"无可用空闲区"<<endl;
return 0;
}
if(free_table[k].length-xk<=minisize)
{
free_table[k].flag=0;
ad=free_table[k].address;
xk=free_table[k].length;
}
else
{
free_table[k].length=free_table[k].length-xk;
ad=free_table[k].address+free_table[k].length;
}
i=0;
while(used_table[i].flag!=0&&i<n)
i++;
if(i>=n)
{
cout<<“无表目填写已分分区,错误”<<endl;
if(free_table[k].flag==0)
free_table[k].falag=1;
else
free_table[k].length=free_table[k].length+xk;
return 0;
}
else
{
used_table[i].address=ad;
used_table[i].length=xk;
used_table[i].flag=j;
}
return 1;
}

int reclaim(J)
char J;
{
int i,k,j,s,t;
float S,L;
s=0;
while((used_table[s].flag!=J||used_table[s].flag==0)&&s<n)
s++;
if(s>=n)
{
cout<<“找不到该作业”<<endl;
return 0;
}

used_table[s].flag=0;

S=used_table[s].address;
L=used_table[s].length;
j=-1;
k=-1;
i=0;

while(i<m&&(j==-1||k==-1))
{
if(free_table[i].flag==0)
{
if(free_table[i].address+free_table[i].length==S)
k=i;
if(free_table[i].address==S+L)
j=i;
}
i++;
}
if(k!=-1)
if(j!=-1)
{
free_table[k].length=free_table[j].length+free_table[k].length+L;
free_table[j].flag=0;
}
else
free_table[k].length=free_table[k].length+L;
else
if(j!=-1)
{
free_table[j].address=S;
free_table[j].length=free_table[j].length+L;
}
else
{
t=0;
while(free_table[t].flag==1&&t<m)
t++;
if(t>=m)
{
cout<<"内存空闲表没有空间,收回空间失败"<<endl;
used_table[s].flag=J;
return 0;
}
free_table[t].address=S;
free_table[t].length=L;
free_table[t].flag=1;
}
return 1;
}
main()
{
int i,a;
float xk;
char J;

free_table[0].address=10240;
free_table[0].length=102400;
free_table[0].flag=1;
for(i=1;i<m;i++)
free_table[i].flag=0;

for(i=0;i<n;i++)
used_table[i].flag=0;
while(1)
{
cout<<"选择功能项(0-退出,1-分配内存,2-回收内存,3-显示内存)"endl;
cout<<"选择功项(0~3):";
cin>>a;
switch(a)
{
case 0:exit(0);
case 1:
cout<<"输入作业名J和作业所需长度xk:";
cin>>J>>xk;
allocate(J.xk);
reak;
case 2:
cout<<"输入要回收分区的作业名";
cin>>J;
relaim(J);
break;
case 3:
cout<<"输出空闲区表:"endl;
getch(;
cout<<" 起始地址 分区长度 标志"endl);
for(i=0;i<m;i++)
cout<<free_table[i].address<<free_table[i].length<<free_table[i].flag<<endl;
cout<<"按任意键,输出已分分区表"<<endl;
for(i=0;i<n;i++)
if(used_table[i].flag!=0)
cout<<used_table[i].address<<used_table[i].length<<used_table[i].flag<<endl;
else
cout<<used_table[i].address<<used_table[i].length<<used_table[i].flag<<endl;
break;
default:
cout<<"没有该选项"<<endl;
}
}
}



错误提示

cx.cpp
e:\windows程序设计\xc\cx.cpp(18) : error C2065: 'J' : undeclared identifier
e:\windows程序设计\xc\cx.cpp(18) : error C2065: 'xk' : undeclared identifier
e:\windows程序设计\xc\cx.cpp(19) : error C2448: '<Unknown>' : function-style initializer appears to be a function definition
e:\windows程序设计\xc\cx.cpp(19) : fatal error C1004: unexpected end of file found
执行 cl.exe 时出错.

cx.obj - 1 error(s), 0 warning(s)
...全文
574 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_35153501 2016-12-01
  • 打赏
  • 举报
回复
引用 4楼paschen 的回复:
[quote=引用 3 楼 qq_35153501 的回复:] [quote=引用 1楼paschen 的回复:]VS不支持这种方式的函数声明: allocate(J,xk) char J; float xk;
请问该怎么改呢[/quote] 改成 int allocate(char J,float xk) 同理其他[/quote]还是有点迷!新手! 不过谢谢了 我研究下 就是改了后错误更多了
paschen 2016-12-01
  • 打赏
  • 举报
回复
引用 3 楼 qq_35153501 的回复:
[quote=引用 1楼paschen 的回复:]VS不支持这种方式的函数声明: allocate(J,xk) char J; float xk;
请问该怎么改呢[/quote] 改成 int allocate(char J,float xk) 同理其他
qq_35153501 2016-12-01
  • 打赏
  • 举报
回复
引用 1楼paschen 的回复:
VS不支持这种方式的函数声明: allocate(J,xk) char J; float xk;
请问该怎么改呢
qq_35153501 2016-12-01
  • 打赏
  • 举报
回复
那请问应该怎么改呢!?
paschen 2016-12-01
  • 打赏
  • 举报
回复
VS不支持这种方式的函数声明: allocate(J,xk) char J; float xk;
小灸舞 2016-12-01
  • 打赏
  • 举报
回复
你这个完全写的乱七八糟。
1.函数声明写的乱七八糟
2. 像这种又是什么free_table[i].length<free[k].length???没看见你定义叫free的变量(而且也尽量不要取这个名字)

PS:根据编译器的错误提示一个个改,或者看下定义函数的基本,重新写一下
shen_wei 2016-12-01
  • 打赏
  • 举报
回复
#define n 10
#define m 10
#define minisize 100
struct
{
	float address;
	float length;
	int flag;
}used_table[n];
struct
{
	float address;
	float length;
	int flag;
}free_table[m];

int allocate(char J,float xk)
{
	int i,k;
	float ad;
	k=-1;
	for(i=0;i<m;i++)
	{
		if(free_table[i].length>=xk&&free_table[i].flag==1)
		{
			if(k==-1 || free_table[i].length < free_table[k].length)
			{	
				k=i;
			}
		}
	}
	if(k==-1)
	{
		cout<<"无可用空闲区"<<endl;
		return 0;
	}
	if(free_table[k].length-xk<=minisize)
	{
		free_table[k].flag=0;
		ad=free_table[k].address;
		xk=free_table[k].length;
	}
	else
	{
		free_table[k].length=free_table[k].length-xk;
		ad=free_table[k].address+free_table[k].length;
	}
	i=0;
	while(used_table[i].flag!=0&&i<n)
		i++;
	if(i>=n)
	{
		cout<<"无表目填写已分分区,错误"<<endl;
		if(free_table[k].flag==0)
		{
			free_table[k].flag=1;
		}
		else
			free_table[k].length=free_table[k].length+xk;
		return 0;
	}
	else
	{
		used_table[i].address=ad;
		used_table[i].length=xk;
		used_table[i].flag=1;
	}
	return 1;
}

int reclaim(char J)
{
	int i,k,j,s,t;
	float S,L;
	s=0;
	while((used_table[s].flag!=J||used_table[s].flag==0)&&s<n)
		s++;
	if(s>=n)
	{
		cout<<"找不到该作业"<<endl;
		return 0;
	}

	used_table[s].flag=0;

	S=used_table[s].address;
	L=used_table[s].length;
	j=-1;
	k=-1;
	i=0;

	while(i<m&&(j==-1||k==-1))
	{
		if(free_table[i].flag==0)
		{
			if(free_table[i].address+free_table[i].length==S)
				k=i;
			if(free_table[i].address==S+L)
				j=i;
		}
		i++;
	}
	if(k!=-1)
		if(j!=-1)
		{
			free_table[k].length=free_table[j].length+free_table[k].length+L;
			free_table[j].flag=0;
		}
		else
			free_table[k].length=free_table[k].length+L;
	else
		if(j!=-1)
		{
			free_table[j].address=S;
			free_table[j].length=free_table[j].length+L;
		}
		else
		{
			t=0;
			while(free_table[t].flag==1&&t<m)
				t++;
			if(t>=m)
			{
				cout<<"内存空闲表没有空间,收回空间失败"<<endl;
				used_table[s].flag=J;
				return 0;
			}
			free_table[t].address=S;
			free_table[t].length=L;
			free_table[t].flag=1;
		}
		return 1;
}
int main()
{
	int i,a;
	float xk;
	char J;

	free_table[0].address=10240;
	free_table[0].length=102400;
	free_table[0].flag=1;
	for(i=1;i<m;i++)
		free_table[i].flag=0;

	for(i=0;i<n;i++)
		used_table[i].flag=0;
	while(1)
	{
		cout<<"选择功能项(0-退出,1-分配内存,2-回收内存,3-显示内存)"<<endl;
		cout<<"选择功项(0~3):";
		cin>>a;
		switch(a)
		{ 
		case 0:exit(0);
		case 1:
			cout<<"输入作业名J和作业所需长度xk:";
			cin>>J>>xk;
			allocate(J,xk);
			break;
		case 2:
			cout<<"输入要回收分区的作业名";
			cin>>J;
			reclaim(J);
			break;
		case 3:
			cout<<"输出空闲区表:"<<endl;
			//m = getch();
			cout<<"   起始地址  分区长度  标志"<<endl;
			for(i=0;i<m;i++)
				cout<<free_table[i].address<<free_table[i].length<<free_table[i].flag<<endl;
			cout<<"按任意键,输出已分分区表"<<endl;
			for(i=0;i<n;i++)
				if(used_table[i].flag!=0)
					cout<<used_table[i].address<<used_table[i].length<<used_table[i].flag<<endl;
				else
					cout<<used_table[i].address<<used_table[i].length<<used_table[i].flag<<endl;
			break;
		default:
			cout<<"没有该选项"<<endl;
		}
	}
}

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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