在上一课我们已经知道了循环是改变程序正常流程(自上而下)的两种方式的一种,第二种方式是选择。选择在程序中依靠一个表达式的值使其一次性跳转到程序的不同的部分。下面是 MQL4中可用到的几种选择声明:一、 If 语句。If 语句是最简单的选择声明,例:if( x < 100 )Print("hi");if 关键字后面是小括号,小括号里是测试表达式(x<100)。当测试表达式的值为真的时候,if主体将被执行(print(“hi”);) 。如果测试表达式的值为假,将跳转到if语句后面执行其后的语句。下面是 if声明的流程图:
if 主体中的多语句:像循环一样, if声明也可以通过大括号{}来包含多个语句,例:if(current_price==stop_lose){ Print("you have to close the order"); PlaySound("warning.wav");}嵌套:选择和循环可以互相嵌套。你可以在循环中嵌套一个选择语句,或者在选择语句中嵌套一个循环,或者循环中嵌套一个循环,或者选择语句嵌套选择语句。例:for(int i=2;i<10;i++)if(i%2==0){Print(“这不是一个素数。”);PlaySound(“wrian.wav”);}上面的例子中, for循环嵌套了一个if语句。注意:循环的主体部分并没有用大括号包围,这是因为 if语句和它的主体被认为是一个单独的语句。二、 if….else 语句if 语句使我们在条件为真是做某些事情,设想我们还想在条件为假的时候做另外的事情,该怎么办呢?这时就用到了if……else 语句。例如:if(current_price>stop_lose) Print("It’s too late to stop, please stop!");else Print("you playing well today!");在上例中,如果测试表达式为真,程序给出一个消息;如果测试表达式为假,程序给出另一个消息。下面是 if……else 语句的流程图:
if…..else 语句的嵌套:你可以在 if语句中嵌套if….else 语句,也可以在if….else 语句中嵌套if…..else 语句。例:if(current_price>stop_lose) Print("It’s too late to stop, please stop!");if(current_price==stop_lose) Print("It’s time to stop!");else Print("you playing well today!");在 if…else 语句的嵌套中有一个潜在的问题,你可能不经意的把else匹配给一个错误的if。有两种办法来解决这个问题:A、 你可以用大括号包含中 if….else 语句。例:if(current_price>stop_lose) { Print("It’s too late to stop, please stop!");if(current_price==stop_lose) Print("It’s time to stop!");else Print("you playing well today!");}B、 把 else匹配给最近的if(在上面的例子中是if(current_price==stop_lose))。三、 switch 语句如果你有一个巨大的选择树,并且所有的选择依赖一个相同变量的值,那么你可以使用 switch语句。例:switch(x) { case 'A': Print("CASE A"); break; case 'B': case 'C': Print("CASE B or C"); break; default: Print("NOT A, B or C"); break; }在上面的例子中, switch跟着一个小括号,小括号里包含switch常数,switch可以是一个整数,一个字符或者一个常数表达式。常数表达式不能包含变量,例如:case X+Y:非法的 switch常数。switch 语句匹配常量X到case常量中的一个。当 case==’A’,程序将输出 CASE A并且break语句将告诉控制跳出switch代码段。当 case==’B’或者 case==’C’,程序将输出 CASE B OR C,这是因为CASE ‘B’后面没有 break语句。如果 case x !=任何CASE常量,switch将执行default case,并输出 NOT A,B orC。下面是 switch语句的流程图:
最后感谢大家,欢迎回帖批评指正。
|