以下是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 :(得分:2)
这是错误编程的一个很好的例子。首先,在此函数中更改了一些未知的全局变量。 “tot = tot + 1”!第二行“F”是另一个未知的全局变量,分配为“0”。或者这是唯一使用此变量的地方?在这种情况下,它是在此隐式声明的变体。使用昏暗来声明它。这样做是基本合法的。 Globals应作为参数传递给函数,如下所示:
function CheckPoss(u as integer, tot as integer) as integer
dim f as integer
f=0
这完全是关于良好实践,因此输入是清晰的,输出是清晰的,所有变量赋值都应该通过传递给函数的参数。 也没有声明返回类型。这是视觉基础吗?还是一些较旧的基础?无论如何,返回类型是视觉基础的变体。较旧的基本类型是整数类型。
如果不满足条件,此函数的输出很可能为零!在代码中也应该清楚这一点,并不清楚它是什么,我理解你为什么要问。我很惊讶这段代码来自一个工作程序。
祝你的项目好运!
答案 1 :(得分: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;
}
}
return命令需要是此函数的最后一个命令。在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;
}
}