leilei123 发表于 2012-9-13 10:46:53

If...Then...Else 判断语句请教(已解决)

本帖最后由 leilei123 于 2012-9-13 14:59 编辑

原实例代码
Dim $s
$s=InputBox("学生成绩","请输入学生的成绩")
If @error=1 Or $s="" Then
        Exit
EndIf
If $s>=0 And $s<=100 Then
        If $s>90 Then
                MsgBox(0,"学生成绩","优秀!")
        ElseIf $s>80 Then
                msgBox(0,"学生成绩","良好!")
        ElseIf $s>=60 Then
                msgBox(0,"学生成绩","及格!")
        Else
                msgBox(0,"学生成绩","不及格!")
                EndIf
Else
        MsgBox(0+16,"学生成绩","学生成绩输入错误!")
        EndIf

不明白的地方
        ElseIf $s>80 Then
                msgBox(0,"学生成绩","良好!")
        ElseIf $s>=60 Then
                msgBox(0,"学生成绩","及格!")
为啥不能换行写成
                Else
                If $s>80 Then
                msgBox(0,"学生成绩","良好!")
                Else
                If $s>=60 Then
                msgBox(0,"学生成绩","及格!")
我看有的实例是分开写的哈,啥时候elseif需写一起,啥时候可以换行分开写?

netegg 发表于 2012-9-13 11:07:49

回复 1# leilei123

怎么可能不行,后面的 endif 跟齐了就行了,几层跟几个

leilei123 发表于 2012-9-13 11:31:05

回复 2# netegg


不太明白,就把原实例的elseif,换行书写就得加endif吗?能给详细解释下吗。谢谢了!!

netegg 发表于 2012-9-13 11:38:17

本帖最后由 netegg 于 2012-9-13 11:42 编辑

if ...then
......
else
if ..... then
.....
else
    if ...... then
      ......
    endif
endif
endif

yunnl 发表于 2012-9-13 11:42:46

if ...then
......

        if ..... then
        .....
        if ...... then
        ......
        EndIf
Else
......
EndIf这样也可以啊

netegg 发表于 2012-9-13 12:08:47

本帖最后由 netegg 于 2012-9-13 12:16 编辑

回复 5# yunnl
确定这个和楼主的要求效果相同?不过,也是,看lz如何安排自己的条件了

leilei123 发表于 2012-9-13 12:22:06

回复 4# netegg

非常感谢,还有一点明白,原实例ElseIf一起书写
If $s>90 Then
                MsgBox(0,"学生成绩","优秀!")
      ElseIf $s>80 Then
                msgBox(0,"学生成绩","良好!")
      ElseIf $s>=60 Then
                msgBox(0,"学生成绩","及格!")
      Else
                msgBox(0,"学生成绩","不及格!")
                EndIf
这一段后边只跟一个endif就可以,把else,if换行写,endif就得多个?为啥哈

netegg 发表于 2012-9-13 12:27:22

elseif 是一个关键字和 if 是同级的
else
if 是两个关键字,且是嵌套关系,是上层 if 里的一个分支,必须标识出判断结束,即endif

Qokelate 发表于 2012-9-13 12:53:27

IF
    ElseIF
    ElseIF
Endif
串联关系

IF
    ELSE
      IF
      ENDIF
   IF
   ENDIF
Endif
内部的IF是并列关系

netegg 发表于 2012-9-13 13:10:46

回复 9# Qokelate
有点出入吧,我怎么感觉
if
elseif
elseif
endif
是并列关系
if
if
endif
else
   if
   endif
endif
才是串联关系呀

Qokelate 发表于 2012-9-13 13:20:28

本帖最后由 Qokelate 于 2012-9-13 13:24 编辑

回复 10# netegg


    IF
      ELSEIF
      ELSEIF
      ELSEIF
    ENDIF

等价于
    IF
      ELSE
            IF
               ELSE
                        IF
                            ELSE
                         ENDIF
               ENDIF
         ENDIF

而对于
IF            ;1
   ELSE
         IF   ;2
          ENDIF
         IF   ;3
          ENDIF
ENDIF
而言,执行2的判断必定也会执行3的判断,因此说它们是并列的,而ELSEIF只是对上一次判断结果的筛选

Qokelate 发表于 2012-9-13 13:38:16

本帖最后由 Qokelate 于 2012-9-13 13:41 编辑

再想了想,觉得怎样说都不能成立,不同用法产生的关系不同,不能单纯的说怎样怎样的关系,只能是谁包含在谁之中,谁对谁的结果进行筛选

PS:我认为ELSEIF只是为了代码更美观些而已(可以少写些ENDIF)

netegg 发表于 2012-9-13 14:12:18

本帖最后由 netegg 于 2012-9-13 14:14 编辑

local $x =3, $y = 1
if $x = 0 then
msgbox(0,0,$x)
else
if $y = 1 then
   msgbox(0,0,$y-1)
endif
endif

local $x=3, $y = 1
if $x = 0 then
   msgbox(0,0,$x)
elseif $x= 2 then
msgbox(0,0,$y - 1)
endif

liongodmien 发表于 2012-9-13 14:16:29

只要明白了最简单的IF...ELSE....ENDIF,对嵌套有ELSEIF的理解也就不难了。
这种条件语句是按层级关系,由外向内、由上向下的顺序判断条件成立与否,成立就执行之后的语句,之后跳到结尾。IF、ELSEIF只不过是一个条件开关。

leilei123 发表于 2012-9-13 14:57:47

谢谢大家的帮助~理解了不少
页: [1] 2
查看完整版本: If...Then...Else 判断语句请教(已解决)