2

以下是 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
4

2 回答 2

2

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

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

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

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

祝你的项目好运!

于 2013-09-25T10:40:05.447 回答
1

我不确切知道这个功能是做什么的。

在 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;
  }
}

于 2013-10-16T04:01:41.330 回答