原装进口破壁机:c语言的古怪问题

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/29 08:18:04
为什麼会令电脑执行时停不了(出错)

main ()
{void a(int x);
int n;
scanf("%d",&n);
a(n);

}

void a(int x)
{int i;
if (x==0) ;
else
for (i=0;i<=x;i++)
printf("*");
printf("\n");
a(x-1)

}

我们来给第一个函数的每一句代码加上一个注释
main () /*主函数开始*/
{void a(int x);/*定义一个名叫a的带一个整形参数,没有返回之的函数*/
int n; /*定义一个整形变量n*/
scanf("%d",&n); /*从键盘上接受一个10进制数并存放于n这个变量中*/
a(n); /*将n作为参数调用a函数*/
} /*函数结束!*/
/*错误出现,这时候程序跳回a(int x)继续执行 函数自己调用自己?好像叫递归调用加上没有让它停下来的条件于是......无休止的继续下去*/

第二个函数一样
void a(int x) /*定义一个没有返回值函数a其参数为一个整形变量x*/
{int i; /*定义一个整形变量i*/
if (x==0) ; /*如果x==0就什么都不作*/
else /*否则即不等于0*/
for (i=0;i<=x;i++) /*给i赋值为0;当小于等于x时停止for循环;i没循环一次加一*/
printf("*"); /*向屏幕输出一个字符“*”*/
printf("\n"); /*然后输出一个换行换行*/
a(x-1) /*将x-1的值作为该函数a的参数继续调用函数a*/
}/*函数a结束*/
/*错误出现,首先x没有被赋初值,计算机在你定义一个变量后市在内存中随便找一个能放下其数据类型大小的地方,然后告诉程序这个地方的地址,并不会改变其中的数据也就是说里面的数据是随机的,是不可预知的,当你对变量进行赋值的时候是程序向那个地址单元中写入一个数据这时才是你想要的x的值*/

/*还有错误,不过这种错误不应该出现,如果出现了纯属粗心,你是将你写的代码直接贴过来的,因为有“”,tc在编译,检查错误后都回在源代码的最后留下一个,一个主函数中不能使用两个同名函数a和a,主函数少了一个"}"
main()
{void a(int n)
{...
b(x)
}
void b(int x)
{...
...

}}
大概的样子应该是这样的,看了3遍终于明白你是什么意思了!!!
*/

x没有初值

我调试的结果是一闪而过,那结果是正确的,最后也是停下来了.只是一片漆黑,真郁闷~

把else下面的语句用{}包起来,全作为else的内容。

void a(int x)
{
int i;
if (x==0) return;
else
for (i=0;i<=x;i++)
printf("*");
printf("\n");
a(x-1);
return;
}
加两个return语句就好了