main()
的第一行语句开始执行,程序里的每行语句都只会被执行一次。了解 if
语句的应该知道, if
语句让我们依据某个表达式的结果来决定是否执行一条或多条连续语句,当然我们也可以借助 else
来连续检验对个测试条件。
if
语句中的条件表达式必须写在括号()
内,如果表达式运算结果true
,则执行if
后的语句,例如:
if(usr_rsp=='N'||usr_rsp=='n')
guess_again=false;
如果想要执行多条语句,可以在if
后用大括号{}
的形式将语句扩住(也叫语句块),例如:
if(usr_guess==next_elem){
//语句从这里开始执行
num_right++;
guess_right=true;
}//语句从这里结束
注意点:若忘加语句块或者是忘加{}
,if
语句的控制范围就会缩小,例如:
if(usr_guess==next_elem)
num_right++;//if后面表达式为true时会执行该语句
guess_right=true;//不管if后面条件表达式是否为true,该语句都会执行
if
语句也可以配合else
来使用,else
来表示if
语句的测试条件不成立时,需要程序给出的结果(或者说执行单行语句或语句块),例如:
if(usr_guess==next_elem){
//用户猜对了执行某个语句
}
else{
//用户猜错执行某个语句
}
关于else
的用法还有第二种(也就是不涉及大括号{}
),将else
与多条if
语句相结合。例如,用户猜错后,希望输出的响应能够依据用户所猜过的次数而有所变化,可以通过三条独立if
语句来检验:
if(guess_num==1):
cout << "Oops!Nice guess but not quiye it! \n" << endl;
if(guess_num==2):
cout << "Hmm.Sorry.Wrong a second time.\n" << endl;
if(guess_num==3):
cout << "Ah,this is harder than it looks.\n" << endl;
注意点:这种方式有个缺点,三条语句都会判断过去,比如guess_num==1
,程序会从第一条if
判断,符合第一条,但是也会往下继续判断。所以,可以利用else-if
的方式:
if(guess_num==1):
cout << "Oops!Nice guess but not quiye it! \n" << endl;
else
if(guess_num==2):
cout << "Hmm.Sorry.Wrong a second time.\n" << endl;
else
if(guess_num==3):
cout << "Ah,this is harder than it looks.\n" << endl;
else
cout << "It must be getting pretty frustrating by now! \n" << endl;
这样第一条语句会先被求值,如果为true,紧接后面语句会执行,剩下的else-if子句就不会再判断了。
我们也可以对用户猜错部分进一步更新,通过嵌套的方式处理用户猜错时的程序代码,例如:
if(usr_guess==next_elem){
//用户猜对了
}
else{
//用户猜错了
if(guess_num==1):
cout << "Oops!Nice guess but not quiye it! \n" << endl;
else
if(guess_num==2):
cout << "Hmm.Sorry.Wrong a second time.\n" << endl;
else
if(guess_num==3):
cout << "Ah,this is harder than it looks.\n" << endl;
else
cout << "It must be getting pretty frustrating by now! \n" << endl;
//是否再试一次
cout << "Want to try again?(y/n):";
cin >> usr_rsp;
if (usr_rsp == 'N' || usr_rsp == 'n')
guess_again = false;
}
其中else-if
我们可以用switch
替换,例如:
switch (guess_num){
case(1):
cout << "Oops!Nice guess but not quiye it! \n" << endl;
break;
case(2):
cout << "Hmm.Sorry.Wrong a second time.\n" << endl;
break;
case(3):
cout << "Ah,this is harder than it looks.\n" << endl;
break;
default:
cout << "It must be getting pretty frustrating by now! \n" << endl;
break;
}
注意点:switch
后面紧跟()
,放入表达式(对象名也可以视为表达式),表达式为整数形式,后面紧跟一组case
,switch
后表达式计算后,依次和每个case标签表达式进行比较,过程和上述else-if
类似。若所有case
标签都不满足,则执行的default
后的语句。
* break和continue的区别:
break语句:用在switch
语句和循环语句中,功能是:立即从包含他的switch语句体或包含它的最内层的循环体中退出,开始按顺序执行后面的语句。
continue语句:是用在循环语句中,功能是:立即结束本次的循环执行,转到判断循环条件的语句用来判断是否进行下一次循环。
#include
using namespace std;
void main() {
int i = 0;
while (i < 10) {
if (i++ == 5)break;
cout << "Hello\n";
}
}
//输出结果是5条hello
#include
using namespace std;
void main() {
int i = 0;
while (i < 10) {
if (i++ == 5)continue;
cout << "hello\n";
}
}
//输出结果是9条hello
因为在含break
语句的代码中,执行了break
后马上退出了循环体,程序运行结束。结果是输出了5行字符串。
当i=5
,执行continue
语句后,马上退出本次循环 ,循环体后面的语句被跳过。但是循环并没用终止,而是从i=6
开始继续执行下一次循环,即continue
只是跳过了i=5
时应执行的语句,继续往后执行。
只要条件表达式一直成立,循环语句会不断执行单一遇见或者整个语句块。我们利用两个循环来实现一个案例:
int main() {
int num = 1;
int usr_guess; //用户猜测的数字
bool num_seq = true; //显示下一组数列
bool guess_again = true; //用户想再猜一次
bool got_it = false; //用户是否猜对
int guess_num = 0; //用户猜的总次数
int guess_right = 0;//用户猜对次数
char usr_rsp; //用户的回答 内循环用
char try_again; //用户的回答 外循环用
double usr_score = 0.0;//评分比值,采用double双精度类型
const int max_tries = 3;//设置最多猜测次数
int try_cnt = 0;//猜的次数与最多次数比较
while(num_seq==true) {
//用户猜错且想再次猜
while (guess_again == true && got_it == false && (try_cnt++ <= max_tries))
{
std::cout<< "please input your num:" << endl;
std::cin >> usr_guess;
guess_num++;
//如果猜错正确
if (usr_guess == num) {
std::cout << "Your guess is right!" << endl;
got_it = true;
guess_right++;
}
//用户猜错
else {
//判断猜的次数 switch
switch (try_cnt)
{
case(1):
std::cout << "Oops!Nice guess but not quiye it! \n" << endl;
break;
case(2):
std::cout << "Hmm.Sorry.Wrong a second time.\n" << endl;
break;
case(3):
std::cout << "Ah,this is harder than it looks.\n" << endl;
break;
default:
std::cout << "It must be getting pretty frustrating by now! \n" << endl;
break;
}
//是否再试一次
std::cout << "Want to try again?(y/n):";
std::cin >> usr_rsp;
if (usr_rsp == 'N' || usr_rsp == 'n')
guess_again = false;
}
}//内层循环结束
std::cout << "want to try another num again?(y/n):";
std::cin >> try_again;
if (try_again=='N'||try_again=='n')
num_seq = false;
}//外循环结束
return 0;
}