C语言 local function definitions are illegal为什么

#include<stdio.h>#include<string.h>structblock{intvalue;inttop,base;intstack[30];};bl... #include <stdio.h>
#include <string.h>
struct block
{
int value;
int top, base;
int stack[30];
};
block b[30];
int n;
void print( void );
void put_( int x, int y );
void init( int x );
int find( int x );
void move_over( int x, int y );
void move_onto( int x, int y );
void pile_onto( int x, int y );
void pile_over( int x, int y );
int main()
{
int i;
char ch[20];
scanf( "%d", &n );
memset( b, 0, sizeof(b) );
for( i = 0; i < n; i++ )
{
b[i].value = i;
b[i].stack[0] = i;
b[i].top = b[i].base= 0;
}
getchar();
while( gets( ch ) && ch[0] != 'q' )
{
if( ch[0] == 'm' || ch[8] == 'n' ) //move onto
move_onto( ch[5]-'0', ch[12]-'0' );
if( ch[0] == 'm' && ch[8] == 'v' ) //move over
move_over( ch[5]-'0', ch[12]-'0' );
if( ch[0] == 'p' && ch[8] == 'n' ) //pile onto
pile_onto( ch[5]-'0', ch[12]-'0' );
if( ch[0] == 'p' && ch[8] == 'v' ) //pile over
pile_over( ch[5]-'0', ch[12]-'0' );
}
print();
return 0;
}
void move_onto( int x, int y )
{
if( x == y )
return;
init( x );
init( y );
put_( x, y );
}
void move_over( int x, int y )
{
if( x == y )
return;
init( x );
y = find( y );
put_( x, y );
}
void pile_onto( int x, int y )
{
if( x == y )
return;
init( y );
put_( x, y );
}
void pile_over( int x, int y )
{
if( x == y )
return;
x = find( x );
y = find( y );
put_( x, y );
}
void init( int a )
{
int i;
while( b[a].top )
{
for( i = 0; i < n; i++ )
if( b[a].stack[b[a].top] == b[i].value )
b[i].stack[++b[i].top] = b[i].value;
b[a].top--;
}
b[a].base = b[a].top = 0;
b[a].stack[0] = b[a].value;
}
int find ( int x )
{
int i, j;
for( i = 0; i < n; i++ )
{
j = b[i].top;
while( j )
if( j-- == x )
return i;
return x;
}

void put_( int x, int y )
{
while( b[x].top - b[x].base >= 0 )
b[y].stack[b[y].top++] = b[x].stack[b[x].base++];
}

void print( void )
{
int i;
for( i = 0; i < n; i++ )
{
printf( "%d:", i );
while( b[i].top - b[i].base >= 0 )
{
printf( " %d", b[i].stack[b[i].base] );
b[i].base++;
}
printf( "\n" );
}
}
block b[30]这点我打错了,前面有个struct ,这个是失误
展开
 我来答
苏木槿华
高粉答主

推荐于2019-10-10 · 繁杂信息太多,你要学会辨别
知道答主
回答量:32
采纳率:100%
帮助的人:7438
展开全部

程序是你的{}位置匹配有问题

在void main()前面少了‘}’

在printf("\n记录矩阵行和列:\n");前面多了‘}’

在最后又少了‘}’

另外,程序不符合C或C++标准写法(若你的编译器可用,也不算问题)

扩展资料:

C语言的运算符包含的范围很广泛,共有34种运算符。C语言把括号、赋值、强制类型转换等都作为运算符处理。从而使C语言的运算类型极其丰富,表达式类型多样化。灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。

C语言的数据类型有:整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据结构的运算。并引入了指针概念,使程序效率更高。

参考资料:C语言_百度百科

b94665
推荐于2017-09-20 · TA获得超过3846个赞
知道小有建树答主
回答量:1032
采纳率:83%
帮助的人:258万
展开全部

C语言 local function definitions are illegal是:本地函数定义不合法的意思!

造成这种问题的原因通常是因为函数的嵌套定义造成的。

C语言不允许函数嵌套定义,也就是在函数里面定义函数。

通常造成函数嵌套定义的原因有两种:

①直接在函数里面定义另一个函数(新手最常犯的错误,在main函数里面定义函数)。如:

#include <stdio.h>
int main(){
        // 在main函数里面定义一个名为innerFunc的函数,非法
    void innerFunc(){
       // other codes
    }
    return 0;
}

解决办法就是将函数放到外面定义。

②大括号不匹配,造成嵌套定义(新手常犯,且不易发现)。如:

#include <stdio.h>

void outterFunc(){
    // ....
    void innerFunc(){
       // ...
    }
    //少了一个“}”导致嵌套定义,非法
   int main(){
       //...
       return 0;
   }

解决办法是将大括号补全,写代码时细心,最好先打全括号,再在括号里面写代码。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jelly279
2012-08-16 · TA获得超过244个赞
知道小有建树答主
回答量:332
采纳率:0%
帮助的人:97.7万
展开全部
struct block b[30];//没有用typedef而直接用名字是不对的
//find里少了一个}
int find ( int x )
{
int i, j;
for( i = 0; i < n; i++ )
{
j = b[i].top;
while( j )
if( j-- == x )
return i;
}
return x;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友59342257e
推荐于2017-09-27 · TA获得超过509个赞
知道小有建树答主
回答量:401
采纳率:50%
帮助的人:215万
展开全部
改好了,一个是函数实现的顺序问题造成的额一个是掉了一个}
下面是改好的

#include <stdio.h>
#include <string.h>
struct block
{
int value;
int top, base;
int stack[30];
};
block b[30];
int n;
void print( void );
void put_( int x, int y );
void init( int x );
int find( int x );
void move_over( int x, int y );
void move_onto( int x, int y );
void pile_onto( int x, int y );
void pile_over( int x, int y );
int main()
{
int i;
char ch[20];
scanf( "%d", &n );
memset( b, 0, sizeof(b) );
for( i = 0; i < n; i++ )
{
b[i].value = i;
b[i].stack[0] = i;
b[i].top = b[i].base= 0;
}
getchar();
while( gets( ch ) && ch[0] != 'q' )
{
if( ch[0] == 'm' || ch[8] == 'n' ) //move onto
move_onto( ch[5]-'0', ch[12]-'0' );
if( ch[0] == 'm' && ch[8] == 'v' ) //move over
move_over( ch[5]-'0', ch[12]-'0' );
if( ch[0] == 'p' && ch[8] == 'n' ) //pile onto
pile_onto( ch[5]-'0', ch[12]-'0' );
if( ch[0] == 'p' && ch[8] == 'v' ) //pile over
pile_over( ch[5]-'0', ch[12]-'0' );
}
print();
return 0;
}

void put_( int x, int y )
{
while( b[x].top - b[x].base >= 0 )
b[y].stack[b[y].top++] = b[x].stack[b[x].base++];
}

void print( void )
{
int i;
for( i = 0; i < n; i++ )
{
printf( "%d:", i );
while( b[i].top - b[i].base >= 0 )
{
printf( " %d", b[i].stack[b[i].base] );
b[i].base++;
}
printf( "\n" );
}
}
void move_onto( int x, int y )
{
if( x == y )
return;
init( x );
init( y );
put_( x, y );
}
void move_over( int x, int y )
{
if( x == y )
return;
init( x );
y = find( y );
put_( x, y );
}
void pile_onto( int x, int y )
{
if( x == y )
return;
init( y );
put_( x, y );
}
void pile_over( int x, int y )
{
if( x == y )
return;
x = find( x );
y = find( y );
put_( x, y );
}
void init( int a )
{
int i;
while( b[a].top )
{
for( i = 0; i < n; i++ )
if( b[a].stack[b[a].top] == b[i].value )
b[i].stack[++b[i].top] = b[i].value;
b[a].top--;
}
b[a].base = b[a].top = 0;
b[a].stack[0] = b[a].value;
}
int find ( int x )
{
int i, j;
for( i = 0; i < n; i++ )
{
j = b[i].top;
while( j )
if( j-- == x )
return i;
return x;
}
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
s443770865
2012-08-16 · 超过19用户采纳过TA的回答
知道答主
回答量:141
采纳率:0%
帮助的人:60.4万
展开全部
复杂啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式