VBScript求和

VBScript求和,vbscript,Vbscript,我有一段代码,它试图显示 0-100之间的所有偶数或用户输入的任何数字 然后, 显示从0到100的所有奇数或用户输入的任何数字的总和 以下是我到目前为止的情况: Evennumber=InputBox(“请输入偶数!”) 打印“总计+e” 对于e=2至偶数步骤2 总计=总计+e 打印总计(“+”&e) 下一个 打印总数 Oddnumber=InputBox(“请输入奇数!”) 打印“总计+o” 对于o=1,对步骤2进行编号 总计=总计+o 打印总计(“+”&o) 下一个 打印总数 这是

我有一段代码,它试图显示

  • 0-100之间的所有偶数或用户输入的任何数字
然后,

  • 显示从0到100的所有奇数或用户输入的任何数字的总和
以下是我到目前为止的情况:

Evennumber=InputBox(“请输入偶数!”)
打印“总计+e”
对于e=2至偶数步骤2
总计=总计+e
打印总计(“+”&e)
下一个
打印总数
Oddnumber=InputBox(“请输入奇数!”)
打印“总计+o”
对于o=1,对步骤2进行编号
总计=总计+o
打印总计(“+”&o)
下一个
打印总数

这是正确的吗?

关键是您在使用前没有将
total
初始化为零

选项显式
尺寸e、o、偶数、奇数、总数
偶数=输入框(“请输入偶数!”)
MsgBox“总计+e”
总数=0
对于e=2至偶数步骤2
总计=总计+e
MsgBox总计&“+”&e
下一个
MsgBox总计
Oddnumber=InputBox(“请输入奇数!”)
MsgBox“总计+o”
总数=0
对于o=1,对步骤2进行编号
总计=总计+o
MsgBox总计&“+”&o
下一个
MsgBox总计
是正确的,但它没有指出您应该尝试遵循的从长远来看对您有益的关键编程原则。本例重点介绍了如果实施,将
total
重新设置为零的可能性

选择数字和按值循环数字的过程几乎相同。当您有这样的代码时,最好的方法是构建一个函数或子过程来处理逻辑,而不需要复制它

下面我们使用一个名为
ProcessNumbers()
的子过程,并通过一点初始设置传递偶数或奇数,我们可以使用相同的函数来处理这两组数字

Option Explicit

'Even
Call ProcessNumbers(True)
'Odd
Call ProcessNumbers(False)

Sub ProcessNumbers(isEven)
  Dim i, startFrom, endAt, total, label
  Dim input, criteria

  If isEven Then 
    startFrom = 2
    endAt = 100
    label = "Even"
  Else
    startFrom = 1
    endAt = 100
    label = "Odd"
  End If
  input = InputBox("Please enter an " & label & " number!")
  If Len(input & "") > 0 And IsNumeric(input) Then endAt = CLng(input)
  For i = startFrom To endAt
    If isEven Then criteria = (i Mod 2 = 0) Else criteria = (i Mod 2 <> 0)
    If criteria Then
      total = total + i
      WScript.Echo total & " + " & i
    End If
  Next
  WScript.Echo total
End Sub

在第二次求和之前,您需要将
total
设置为等于0。实际上,不需要在VBScript中初始化变量,它们默认为0或空字符串。但这确实是一个最佳实践。@montonero是的,但iBug指出,在第二个
For
循环中,
total
需要重新初始化为0。@Lankymart是的,我在OP的帖子下发表了同样的评论:)尽管我完全同意DRY方法,在某些情况下,由于时间消耗和代码复杂性的增加,可能不值得使用它。这个案例是一个很好的例子:你的代码更通用、更健壮,但它比OP的代码复杂得多(这几乎是正确的、有效的)。@montonero试图保持它的简单性,不要有太多分歧,但感谢反馈。