【问题标题】:Default return value of a function in BASICBASIC 中函数的默认返回值
【发布时间】:2013-09-23 17:49:59
【问题描述】:

以下是 BASIC 中的示例程序。如果标记的条件不正确,有人可以告诉我这个函数返回什么吗?我必须将程序移植到 C++ 并且需要理解它。我没有基本知识 - 请耐心等待简单的问题。

FUNCTION CheckPoss (u)
  tot = tot + 1
  f = 0
  SELECT CASE u
    CASE 2
      f = f + CheckIntersection(1, 3, 2, 1)     'A
    CASE 3
      f = f + CheckIntersection(2, 3, 3, 1)     'B
  END SELECT 
  IF f = 0 THEN        <============== This condition if true, 
    CheckPoss = 1      <==============     then return value is 1 
    IF u = 9 THEN
      PrintSolution
    END IF
  END IF
END FUNCTION

【问题讨论】:

  • 取决于类型。整数为 0,布尔值为 false,浮点数为 0。

标签: basic


【解决方案1】:

这是糟糕编程的一个很好的例子。首先在这个函数中改变了一些未知的全局变量。 “tot = tot + 1”!第二行“F”是另一个未知的全局变量,赋值为“0”。或者这是唯一使用此变量的地方?在这种情况下,它是此处隐式声明的变体。使用暗淡来声明它。这样做基本上是合法的。全局变量应该像这样作为参数传递给函数:

function CheckPoss(u as integer, tot as integer) as integer
dim f as integer
f=0

这都是关于良好实践的,所以输入清晰,输出清晰,所有变量赋值都应该通过传递给函数的参数。 返回类型也没有声明。这是视觉基础吗?还是一些较旧的基本款?无论如何,返回类型是 Visual Basic 的一种变体。较旧的基本类型将是整数类型。

如果条件不满足,此函数的输出很可能为零!这在代码中也应该很清楚,现在还不清楚,我理解你为什么问。我很惊讶这段代码来自一个工作程序。

祝你的项目好运!

【讨论】:

    【解决方案2】:

    我不知道这个函数到底有没有作用。

    在 VB.net 上,函数遵循以下结构:

    Public function CheckPoss(Byval u as integer)
         ...       ' Just commands
         return u  ' Or other variable
    end function

    如果不存在'return'命令,函数的返回将是'null'字符。

    在 C 上,函数为:

    int CheckPoss(int u){
      tot++; // Increment tot variable (need be declared)
      int f = 0;
      switch(u){
          case 2:
                f += CheckIntersection(1, 3, 2, 1); // A
                break;
          case 3:
                f += CheckIntersection(2, 3, 3, 1); // B
                break;
      }
      if (f == 0){
            if (u == 9){
                 PrintSolution();
            }
            return 1;
      }
    }

    返回命令必须是该函数的最后一个命令。在 f != 0 的情况下,函数必须返回垃圾(某个值或字符)。

    我的建议是:
    int CheckPoss(int u){
      tot++; // I think that this must count how times you call this function
      int f;
      if(u == 2){
        f = CheckIntersection(1, 3, 2, 1); // A
      }else if(u == 3){
        f = CheckIntersection(2, 3, 3, 1); // B
      }else{
        f = 1; // Case else
      }
      if (f == 0){
        if (u == 9)
          PrintSolution();
        return 1;
      }
    }

    【讨论】:

      猜你喜欢
      • 2019-02-22
      • 2012-08-03
      • 2013-02-18
      • 1970-01-01
      • 1970-01-01
      • 2020-12-22
      • 2011-12-01
      • 2012-02-02
      • 2014-02-13
      相关资源
      最近更新 更多