| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 561 人关注过本帖
标题:求助!为什么用EditPlus编译通过,但运行的时候a[8][4]总是等于1
只看楼主 加入收藏
nice_wl
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-9-18
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
求助!为什么用EditPlus编译通过,但运行的时候a[8][4]总是等于1
程序代码:
#include
static int a[8][8]={0};
int main(int argc, char *argv[])
{
    int i,j;
    for (i=0;i<9 ;i++ )
    {
        for (j=0;j<9 ;j++ )
        {
            if(a[i][j]==1)
            {printf("a[%d][%d]=%d ",i,j,a[i][j]);}
            else
            {
                printf("a[%d][%d]=%d ",i,j,a[i][j]);
            }
        }
    }

    return 0;
}
为什么用EditPlus编译通过,但运行的时候a[8][4]总是等于1,是不是全局变量有问题,小弟初学C,求指教~~
搜索更多相关主题的帖子: color 
2011-11-10 12:45
luchar
Rank: 9Rank: 9Rank: 9
来 自:南京
等 级:蜘蛛侠
帖 子:279
专家分:1263
注 册:2011-11-3
收藏
得分:10 
头文件不对,
#include <stdio.h>
数组下标的值理解不够,是从0开始的
 for (i=0;i<8 ;i++ )
    {
        for (j=0;j<8 ;j++ )
2011-11-10 12:50
飞64213118
Rank: 2
等 级:论坛游民
帖 子:23
专家分:16
注 册:2011-10-2
收藏
得分:10 
楼主对数组的理解不够,数组所代表的内存空间编号即数组下标的值是从0开始的,意思就是如果定义了一个数组int a[4],则此数组的内存空间名称分别是a[0],a[1],a[2],a[3]
所以此题中i和j最大为7,好友对头文件的引用出错
2011-11-10 13:04
nice_wl
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-9-18
收藏
得分:0 
谢谢,改好了。还有请问应该用那个头文件?
2011-11-10 14:00
nice_wl
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-9-18
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <stdlib.h>

//9皇后问题简化,若在a[0][0]放一个棋子,则其他的棋子的方法。
static int a[8][8]={0};
void find_number_1(int i,int j)/* 找出在第i行第j列元素放入棋子后,不能存放元素的行和列的下标,1表示占领,0表示可用; */
{

    int m,n,o,k;/* m列数,n行数 */
    o=i+j;
    k=i-j;


        for (m=0;m<9;m++)
        {
            a[i][m]=1;
//            printf("a[%d][%d]=1",i,m);
        }
        for (n=0;n<9 ;n++ )
        {
            a[n][j]=1;
//            printf("a[%d][%d]=1",n,j);
        }
        for (i=0;i>=0&&i<9 ;i++ )
        {
            for (j=0;j>=0&&j<9;j++)
            {
                if (o==j+i)
                    a[i][j]=1;
//                    printf("a[%d][%d]=1",i,j);
            }
        }
        for (i=0;i>=0&&i<9 ;i++ )
        {
            for (j=0;j>=0&&j<9 ;j++ )
            {
                if (k>0&&k==(i-j))
                a[i][j]=1;
//                    printf("a[%d][%d]=1",i,j);}
                else if (k<=0&&k==j-i)
                a[i][j]=1;
//                    printf("a[%d][%d]=1",j,i);
            }
        }
    }



void tyr()//从a[0][0]开始放棋子的放法,1代表格子不能放,0代表能放
{
    int i,j;
    for (i=0;i<9;i++ )
    {
     for (j=0;j<9;j++ )
    {
         if(a[i][j]==1)
         {
             printf("a[%d][%d]=%d ",i,j,a[i][j]);}
          else if(a[i][j]==0)
         {
          find_number_1(i,j);
          a[i][j]=0;
          printf("a[%d][%d]=%d ",i,j,a[i][j]);
          }
     }
    }

}

int main(int argc, char *argv[])
{
    tyr();
    return 0;
}

刚才那个问题继续,第一个棋子房子a[0][0]上,得出的结果不对。哪位高手能指教下?不甚感激~~!
2011-11-10 14:22
快速回复:求助!为什么用EditPlus编译通过,但运行的时候a[8][4]总是等于1
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024153 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved