| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 454 人关注过本帖
标题:关于if 语句求助!
只看楼主 加入收藏
oszc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:111
专家分:154
注 册:2011-4-15
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:9 
关于if 语句求助!
程序代码:
void draw(int pen,int dir,int step,int arrayDir[],int arrayTotal[][50])
    {
        int i=0;

        if (dir%4==0)
        {
                if(pen==2)
            {
                for (i=0;i<=step;i++)
                {
                    arrayTotal[arrayDir[0]][arrayDir[1]+i]+=1;
                }
                    arrayDir[1]+=step;
            }
        }

        

        if (dir%4==1||-3)
        {
            if (pen==2)
            {
                for(i=0;i<=step;i++)
                {
                    arrayTotal[arrayDir[0]+i][arrayDir[1]]+=1;
                }
                arrayDir[0]+=step;
            }
        }

             if (dir%4==3||-1)
            {
            if (pen==2)
            {
                for(i=0;i<=step;i++)
                {
                    arrayTotal[arrayDir[0]-i][arrayDir[1]]+=1;
                }
                arrayDir[0]-=step;
            }
        }

             if (dir%4==2||-2)
            {
            if (pen==2)
            {
                for(i=0;i<=step;i++)
                {
                    arrayTotal[arrayDir[0]][arrayDir[1]-i]+=1;
                }
                arrayDir[1]-=step;
            }
            }


无论dir是什么,比如(0),都会在每个if中运行,好像无论什么情况 dir%4都是成立的!
2011-05-07 17:09
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:5 
滥用if 用switch吧

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-05-07 17:19
asd45u
Rank: 1
来 自:陕西省延安市
等 级:新手上路
帖 子:3
专家分:5
注 册:2011-4-4
收藏
得分:5 
小菜我看不懂.
2011-05-07 18:45
johnny857
Rank: 1
等 级:新手上路
帖 子:1
专家分:5
注 册:2010-8-5
收藏
得分:5 
  这全是IF  ELSE勒?
2011-05-07 18:55
oszc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:111
专家分:154
注 册:2011-4-15
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

/*logo海龟画图游戏*/

void draw(int pen,int dir,int step,int arrayDir[],int arrayTotal[][50]);


int main(void)
{
    int penStatus=1;  /*determine the pen status down or up*/
    int dir=0;  /*detemine the direction*/
    int command=0;  /*first input command*/
    int command2=0;  /*steps */
    int array1[50][50]={0};
    int arrayDir[2]={0};
    int a=0;
    int i=0;
    int j=0;
    
    while(a!=-1)
    {
    printf("Enetr the command:");
    scanf("%d", &command);

    switch(command)
    {
    case 1:
        penStatus=1;
        break;
    case 2:
        penStatus=2;
        break;
    case 3:
        dir+=1;
        break;
    case 4:
        dir-=1;
        break;
    case 5:
        printf("dir:%d\n",dir);
        scanf(",%d", &command2);
        draw(penStatus,dir,command2,arrayDir,array1);
        printf("poisition now is %d %d\n",arrayDir[0],arrayDir[1]);
        break;
    case 6:
        for(i=0;i<50;i++)
        {
            for (j=0;j<50;j++)
            {
                if (array1[i][j]==1)
                    printf("*");
                else 
                    printf(" ");
            }
            printf("\n");
            
        }
        break;
    case 9:
        a=-1;
        break;
    default:
        printf("Wrong Input");
    }
}
}
    
    void draw(int pen,int dir,int step,int arrayDir[],int arrayTotal[][50])
    {
        int i=0;
        int x;
        x=dir%4;
        printf("%d\n",x);

        if (dir%4==0)
        {
                if(pen==2)
                {
                    for (i=0;i<=step;i++)
                    {
                        arrayTotal[arrayDir[0]][arrayDir[1]+i]+=1;
                    }
                    arrayDir[1]+=step;
                }
        }
                
        if (dir%4==1||-3)
        {
            if (pen==2)
            {
                for(i=0;i<=step;i++)
                {
                    arrayTotal[arrayDir[0]+i][arrayDir[1]]+=1;
                }
                arrayDir[0]+=step;
            }
        }
        
        if (dir%4==3||-1)
        {
            if (pen==2)
            {
                for(i=0;i<=step;i++)
                {
                    arrayTotal[arrayDir[0]-i][arrayDir[1]]+=1;
                }
                arrayDir[0]-=step;
            }
        }
        
         if (dir%4==2||-2)
        {
            if (pen==2)
            {
                for(i=0;i<=step;i++)
                {
                    arrayTotal[arrayDir[0]][arrayDir[1]-i]+=1;
                }
                arrayDir[1]-=step;
            }
        }
        
    }

这是完整的程序


下面是 题目

4.23(龟图)Logo语言在个人计算机用户中非常流行,该语言形成了龟图的概念。
假设有两个机器海龟,通过C++程序控制在房子中移动。在两个方向之一打开画笔,即向上或向下。画笔向下时,海龟跟踪移动的形状并留下移动的路径,画笔向上时,海龟自由移动不写下任何东西。在这个问题中,要模拟海龟的操作和生成计算机化的草图框。
   用20*20数组floor,初始化为0。从数组中读取命令。跟踪任何时候海龟的当前位置和画笔的向上或向下状态。假设海龟总是从位置0,0开始,画笔向上。程序要处理的海龟命令如下:
           命令 含义
1 笔向上
2 笔向下
3 右转
4 左转
5,10 前进10格(或几格)
6 打印20*20数组
9 数据结束(标记)
假设海龟接近平面中心。下列“程序”绘制和打印12*12正方形并让画笔向上:
2
5,12
3
5,12
3
5,12
3
5,12
1
6
9
画笔向下并移动海龟时,将数组floor的相应元素设置为1。指定命令6(打印)时,只要数组中右1,就显示星号或选择的其他符号,画一些有趣的图形。增加其他命令以增加龟图语言的功能
2011-05-07 19:03
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
收藏
得分:5 
看不懂楼主想表达啥意思
2011-05-07 19:10
oszc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:111
专家分:154
注 册:2011-4-15
收藏
得分:0 
在函数draw()中,如果dir=0的时候 :
程序代码:
 
                                if (dir%4==0)        成立
                                if(dir%4==1||-3)     不成立
                                if (dir%4==3||-1)    不成立
                                if (dir%4==2||-2)    不成立

而实际在运行dir=0的时候,上面4个if内的内容全部运行了一遍。
2011-05-07 19:15
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
收藏
得分:0 
回复 7楼 oszc
在第二到第四个if前面加一个else试试
2011-05-07 19:26
oszc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:111
专家分:154
注 册:2011-4-15
收藏
得分:0 
我搞定了
没想到是语法错误,编译器也没提醒

程序代码:

 if(dir%4==1||-3) 
改成

 if(dir%4==1||dir%4==-3)

绝对是一个教训!!!花了我4个小时调试。
2011-05-07 19:31
犹豫情人
Rank: 2
来 自:天津
等 级:论坛游民
帖 子:58
专家分:24
注 册:2010-7-1
收藏
得分:0 
void draw(int pen,int dir,int step,int arrayDir[],int arrayTotal[][50])
    {
        int i=0;

        if (dir%4==0)
        {
                if(pen==2)
            {
                for (i=0;i<=step;i++)
                {
                    arrayTotal[arrayDir[0]][arrayDir[1]+i]+=1;
                }
                    arrayDir[1]+=step;
            }
        }

        

        else if (dir%4==1||-3)
        {
            if (pen==2)
            {
                for(i=0;i<=step;i++)
                {
                    arrayTotal[arrayDir[0]+i][arrayDir[1]]+=1;
                }
                arrayDir[0]+=step;
            }
        }

            else if (dir%4==3||-1)
            {
            if (pen==2)
            {
                for(i=0;i<=step;i++)
                {
                    arrayTotal[arrayDir[0]-i][arrayDir[1]]+=1;
                }
                arrayDir[0]-=step;
            }
        }

            else if (dir%4==2||-2)
            {
            if (pen==2)
            {
                for(i=0;i<=step;i++)
                {
                    arrayTotal[arrayDir[0]][arrayDir[1]-i]+=1;
                }
                arrayDir[1]-=step;
            }
            }
我在每个大的if前面加个else 我运行了一下!不知道是不是你要的结果你试试吧
2011-05-07 19:32
快速回复:关于if 语句求助!
数据加载中...
 
   



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

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