在c语言中 为何一个全局数组的值会变化 或者说 如何定义一个有确定值的全局数组?

不看程序

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int mine[9][9] = {0};
void Play(int x, int y);
void main()
{
int Row, Col;
int a, b;
int c, d;
int i;
srand((unsigned)time(NULL));
int mine[9][9] = {0};
for (i=0;i<10;i++)
{
Row = rand()%9;
Col = rand()%9;
if (mine[Row][Col]==2)
i--;
mine[Row][Col] = 1;
}
int x, y;
printf("请输入");
scanf("%d %d", &x, &y);
Play(x, y);
}
void Play(int x, int y)
{
printf("请输入");
scanf("%d %d", &x, &y);
if (mine[x-1][y-1]==1)
{
printf("您已经输了");
}
else
{
printf("有戏");
Play(x, y);
}
}

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int mine[9][9] = {0};
void Play();
void main()
{
int Row, Col;
int i;
srand(time(NULL));//把main函数中定义的去掉就ok了。
for (i=0;i<10;i++)
{
Row = rand()%9;
Col = rand()%9;
if (mine[Row][Col]==2)
i--;
mine[Row][Col] = 1;
}//对于全局变量,如果函数中重复定义则会覆盖全局变量,导致主函数和调用函数中的值不同。
// int x, y; printf("请输入");
// scanf("%d %d", &x, &y);
Play();//无参函数、
}
void Play()
{
int x,y;
printf("请输入坐标,X,Y,从1-9中选择。\n");
scanf("%d %d", &x, &y); //这两句应该放到else里面,不然还得输一遍想,x,y,会把传过来的参数覆盖、或者在主函数里直接调用。
if (mine[x-1][y-1]==1)
{
printf("您已经输了。");
return; //函数结束。
}
else
{
printf("有戏\n");
Play(); //实际上这里用递归调运不太好。
}
} //望采纳。谢谢~

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-29
int mine[9][9] = {0};怎么定义了两次?这样不可以吧
你在定义第二个局部变量的时候就把第一次定义的全局变量覆盖了追问

现在我想定义一个全局数组 怎么定义 因为后面的主函数和另一个函数都要用这个全局变量
是一个扫雷程序
如果直接在主函数之前定义 后面就显示missing function header (old-style formal list?)

追答

#include
#include
#include
int mine[9][9] = {0};这个就是全局变量,如果你要用这个的话,你直接把函数里面的 int mine[9][9] = {0};改了,例如:int m[9][9] = {0};你没发现这两个定义一模一样么,改了的话你调用int mine[9][9] = {0};的时候就是全局的

相似回答