1、有俩变量需要考虑,一个是srv一个是local。
有三种情况:A、srv为空/local为空 B、srv非空/local空 C、srv空/local非空 。
srv为空的返回值a为1/2 ,非空的返回值a为0 。local为空的返回值b为1/2,非空的返回值b为0。
2、用 离散数学 的角度思考,可以把a当做srv为空,!a当做srv非空。
A情况可改写成a&b ,B情况可改写成!a&b,C情况可改写成a&!b
if ( a & b ){
……
} else if ( !a & b ) {
……
} else if ( a & !b ) {
……
}
3、例如以下代码:
//a & b 空 !a & b srv非空local空 a & !b srv空local非空 !a & !b srv非空local非空
if ( a & b ) {
WriteLog("The ServerIp and Local Ip is NULL");
nSetIpProcess = 1;
} else if ( !a & b ) {
WriteLog("The ServerIp isn't NULL,theLocal Ip is NULL");
SetHostsServerIp();
nSetIpProcess = 0;
} else if ( !b ) { //Ip正确(第一位位不为空),得判断serverip是否为空,子网掩码是否正确,网关是否为空
if( a ){ //若serverip为空localip非空,就不设置serverip,设置localip
WriteLog("The ServerIp is NULL,theLocal Ip isn't NULL");
} else if ( !a ) {
WriteLog("The ServerIp isn't NULL,theLocal Ip isn't NULL");
SetHostsServerIp();
}
if(c == 1 || c == 2 || c == 3) //子网掩码不正确,二进制的1必须是连续的
{
WriteLog("设置失败,请输入正确的子网掩码!");
sprintf(szPath,"%sresult\\error_InvalidNetmask.png",exepath);
Form2->Image1->Picture->LoadFromFile(szPath);
Form2->Left = Form1->Left+ FORM2LEFT;
Form2->Top = Form1->Top+ FORM2TOP;
Form2->suiButton1->Left = FORM2BUTTONLEFT;
Form2->suiButton1->Top = FORM2BUTTONTOP;
Form2->ShowModal(); //"设置失败,请输入正确的子网掩码!"
return ;
}
else if(c == 0) //子网掩码正确
{
if(d == 1 || d == 2) //网关为空
{
if(a == 0) //如果服务器Ip正确,将服务器Ip赋给网关
{
strcpy(szGateway,szServerIp);
}
else //如果服务器Ip不正确,将Ip赋给网关
{
strcpy(szGateway,szIp);
}
}
}
unsigned long ulThreadResult = (unsigned long)_beginthreadex(NULL,0,(unsigned (__stdcall*)(void*))SetIp,NULL,0,NULL);
}