鱼C论坛

 找回密码
 立即注册
查看: 2231|回复: 1

if...if和else if

[复制链接]
发表于 2020-5-31 09:13:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
#include "windows.h"
#include <stdlib.h>
#include <conio.h> 
//定义全局变量
int high,width;//画面尺寸 
int bird_x,bird_y;//小鸟坐标 
int ball_vx,ball_vy;//小球速度 
int bar_y,bar_xdown,bar_xtop;//柱子 

 
void gotoxy(int x,int y)//将光标移动到(x,y)位置
{
HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos;
pos.X=x;
pos.Y=y;
SetConsoleCursorPosition(handle,pos);
}

void HideCursor()//隐藏光标
{
CONSOLE_CURSOR_INFO cursor_info={1,0};//第二个值为0表示隐藏光标
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
}

void startup()
{
        high=15,width=25;
        bird_x=0,bird_y=width/3;
        bar_y=width,bar_xtop=high/4;
        bar_xdown=high/2;
        
        
        HideCursor();
}

void show()
{
        gotoxy(0,0);//光标必须(0,0) 
        //system("cls");
        int i,j;
        for(i=0;i<=high+1;i++){
                for(j=0;j<=width+1;j++){
                        if(i==high+1)//显示下边框 
                        {
                                printf("=");
                        }
                        else if(j==width+1)//显示右边框 
                        {
                                printf("||");
                        }
                        else if((i==bird_x)&&(j==bird_y)) printf("@"); //显示小鸟 
                        if((j==bar_y)&&((i<=bar_xtop)||(i>=bar_xdown)))
                        {
                                printf("*");//输出障碍 
                        }                
                        else printf(" ");
                }
                printf("\n");
                
        }

}

void update_without()
{        
        bird_x++;
        Sleep(50);
      
         
}
void update_with()
{
        char input;
        if(kbhit()){
                input =getch();
                if(input ==' ') 
                {
                        bird_x-=2;
                        
                }
                
        }
                
}


int main()
{
        system("title 反弹球消砖块");
        //gotoxy(0,0);//把光标移至画面左顶点(0,0)处 
        startup();
        //循环,游戏运行
        while(1)
        {
        show();
        update_without(); 
        update_with();        
        
         } 
        
        return 0;
}

问题:
show函数里,障碍物*,画面||,会随着小鸟@的下落一起显示
                        else if((i==bird_x)&&(j==bird_y)) printf("@"); //显示小鸟 
                        if((j==bar_y)&&((i<=bar_xtop)||(i>=bar_xdown)))//if之前没有加else 造成的,if...if,和else if有什么不一样?求解释。
                        {
                                printf("*");//输出障碍 
                        }                
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-1 09:56:36 | 显示全部楼层
如果写成if...if ,每个if都会判断,if...else if 的话,如果走了if,不会再判断else if,多层的话走了任意一个else if,后面的else if 都不会再判断了。
比如:
#include<stdio.h>
int main(){
        int a = 0;
        int b = 1;
        int c = 2;

        printf("*********case1***********\n");
        //下面这段代码只会输出 a<b 
        //多层else if 只要走了一个分支 ,其他的分支不再判断
        if(a>b){
                printf("a>b\n");
        }else if (a < b){
                printf("a<b\n");
        }else if (a < c){
                printf("a<c\n");
        }

        printf("*********case2***********\n");

        //下面这段代码会输出 a<b a<c
    //第二个if 是独立判断的
        if(a>b){
                printf("a>b\n");
        }else if (a < b){
                printf("a<b\n");
        }
        if (a < c){
                printf("a<c\n");
        }




        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 17:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表