2013-09-23 131 views
2

以下是BASIC中的示例程序。如果標記的條件不正確,有人能告訴我這個函數返回什麼嗎?我必須將程序移植到C++,並且需要理解它。我沒有BASIC知識 - 請耐心解答一個簡單的問題。BASIC中函數的默認返回值

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

取決於類型。整數是0,布爾錯誤,浮點數0。 –

回答

2

這是編程不好的一個很好的例子。首先在這個函數中改變一些未知的全局變量。 「tot = tot + 1」!第二行「F」是另一個未知的全局變量,賦值爲「0」。或者這是唯一使用這個變量的地方?在這種情況下,它是在這裏隱式聲明的變體。使用昏暗的聲明。這樣做在基礎上是合法的。全局應作爲參數傳遞給函數是這樣的:

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

這是所有好習慣,輸入是明確的,輸出是明確的,所有的變量賦值應該通過傳遞給函數的參數。 返回類型也未聲明。這是視覺基礎嗎?或者它是一些較老的基礎?無論如何,返回類型是Visual Basic中的變體。較早的基礎是一個整數類型。

如果條件不符合,此函數的輸出將可能爲零!這在代碼中也應該清楚,它不是很清楚,我明白你爲什麼問。我很驚訝這段代碼來自一個工作程序。

祝您的項目順利!

1

我並不確切知道這個功能。

在VB.net,此功能,按照結構:

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

如果不存在「迴歸」命令,函數的返回將是「空」字。

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