(五)语句

简单语句

空语句

复杂语句(块,block)

花括号括起来的语句和声明的序列,每块一个作用域。

作用域

条件语句

if

if…else if…else…

  • 嵌套if
  • 垂悬else:同层if和else放同一列

switch

  • case后不能接对象,必须是整数常量表达式
	int n;
	int arr[5] = {0,0,0,0,0};
	while (cin >> n) {
		switch (n) {
		case 0: ++arr[0];
				break;
		case 1:case 5: //两种条件并列方法
				++arr[1];
				int a ;
				a = 0;   //这两句正确
				int a = 1; //这句错误,定义在了switch块内,但其他case收不到初始化值。
				break;
		case 2:{++arr[2];
				int b = 1; //这句正确,在case2的块内初始化可以
				}
				break;
		case 3: ++arr[3];
				break;
		case 4:++arr[4];
				break;
		default: break;
		}
	}
	for (int i = 0; i < 5; ++i) {
		cout << "arr[" << i << "]:" << arr[i] << endl;
	}

迭代语句

while

while(condition){statement}

  • 不确定迭代多少次时使用while
  • while条件和内部变量经历着从创建到销毁的过程。

for

for(initializer;condition;expression){statement}

  • initializer中可以定义多个变量,但声明只有一条,所以定义的多个变量必须是同一类型。
for(decltype(s.size())i = 0;sz = s.size();i<sz;++i)
  • 语句头initializer,condition,expression都可以省略。

范围for

for(declaration:expression){statement}

vector<int> n = {1,2,3,4,5,6,7,8};
for(auto &num:n)
{ ;}

do…while

do{statement}while(condition);

  • statement执行一次再判断condition,condition不能为空
	string s;
	do {
		int val, val2;
		cout << "input two numbers";
		cin >> val >> val2;
		cout << "sum:" << val + val2 << endl;
		cout << "more?y/n" << endl;
		cin >> s; //直接覆盖之前的值
		cout << s << endl;
	} while (!s.empty() && s[0] != 'n'); //这里要有个分号

跳转语句

break

  • 负责终止离它最近的while、do while、for或switch语句。执行这些语句后的第一条语句。

continue

  • 终止最近循环的当前迭代,立即开始下一次迭代。

goto

goto label;

  • labeled statement 带标签语句
end:return; //带标签语句,可以作为goto目标
  • 不能将程序控制从变量作用域之外到变量作用域之内。
	string s;
begin:
	int val, val2;   //goto语句执行后,销毁val,val2
	cout << "input two numbers";
	cin >> val >> val2;
	cout << "sum:" << val + val2 << endl;
	cout << "more?y/n" << endl;
	cin >> s;
	cout << s << endl;
	if (!s.empty() && s[0] != 'n') {
		goto begin;
	}

try语句块和异常处理

异常

  • 异常是指存在于运行时的反常行为,这些行为超出函数正常功能范围。典型异常如失去数据库连接,遇到意外输入等。当程序检测到无法处理的部分,需要用到异常处理。
  • 异常包括异常检测异常处理两部分。检测部分发出信号表明程序遇到故障,该信号无需知道故障在何处得到解决;处理部分会对异常进行相应处理,比如输入无效,处理部分会要求用户重新输入正确数据;如果丢失数据库连接,会发出警报等。
  • 检测部分使用throw表达式表示,可以说throw引发了异常。处理部分使用try语句块处理。
  • 异常类:用于在throw表达式和相关catch子句之间传递异常的具体信息。

throw表达式

使用throw表达式引发一个异常,抛出异常类型见最后。

throw type(expression);//关键词throw+抛出异常类型+表达式

cin >> val >> val2;
	if(val>100||val1>100){
		throw runtime_error("number must less than 100!") //
	}

try语句块

  • try语句块以关键字try开始,以一个或多个catch子句结束。try语句中代码抛出的异常通常会被某个catch子句处理。catch子句处理异常,也成为异常处理代码。
  • 如果没有找到任何匹配的catch子句,程序会转到terminate的标准库函数,执行该函数将导致程序非正常退出。
try{
	program-statements
}catch(exception-declaration){  //异常声明
	handler-statements
}catch(exception-declaration){
	handler-statements
}//...
#include <iostream>
#include <string>
#include <exception>
#include <stdexcept>
using namespace std;

int main() {
	string s;
begin:
	int val, val2;
	cout << "input two numbers";
	cin >> val >> val2;
	try {
		if (val > 100 || val2 > 100) {
			throw runtime_error("number must less than 100!");
		}
	} catch (runtime_error err) { //异常声明,err的类型是runtime_error
		cout << err.what()    //what是runtime_error的成员函数,返回"number must less than 100!"
		     << "\nTry again?y/n" << endl;
		char c;
		cin >> c;
		if (c == 'y') {
			goto begin;
		} else {
			return 0;
		}
	}
	cout << "sum:" << val + val2 << endl;
	cout << "more?y/n" << endl;
	cin >> s;
	cout << s << endl;
	if (!s.empty() && s[0] != 'n') {
		goto begin;
	}
	return 1;
}

在这里插入图片描述

标准异常

C++定义了一组类,用来报告标准库函数遇到的问题。

  • 头文件
#include<exception> //最通用的异常类,报告异常发生
#include<stdexecpt> //常用异常类
#include<new> //bad_alloc异常类型
#include<type_info> //bad_cast异常类型
  • C++ <stdexcept>定义的异常类
  • exception、bad_alloc和bad_cast异常类只能默认初始化,不能提供初始值。其他要用string或char[]型初始化这些类型对象,不能默认初始化。
  • 异常类型定义了一个what成员函数,该函数没有任何参数,返回值是const char*。是关于异常的一些文本信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值