C++Primer第五版第五章练习5.13

/*
练习5.13:
下面显示的每个程序都含有一个常见的编程错误,指出错误在哪里,然后修改它们:
(a)unsigned aCnt=0, eCnt=0, iouCnt=0;
char ch=next_text();
switch(ch){
	case 'a':aCnt++;//缺少break, 程序会执行至swith结尾处
	case 'e':eCnt++;//缺少break
	default:iouCnt++;//缺少break
}

(b)unsigned index=some_value();
switch(index){
	case 1:
		int ix=get_value();//修改:取消初始化,改为赋值:int ix;ix=get_value();
		ivec[ix]=index;
		break;
	default:
		ix=ivec.size()-1;//C++语言规定,不允许跨过变量的初始化语句直接跳转到该变量作用域内的另一个位置
		ivec[ix]=index;//缺少一个break
}

(c)unsigned evenCnt=0, oddCnt=0;
int digit=get_num() % 10;
switch(digit){
	case 1, 3, 5, 7, 9://case标签必须是整型常量表达式。有逗号运算符的不行。
		oddCnt++;
		break;
	case 2, 4, 6, 8, 10:
		evenCnt++;
		break;
}

(d)unsigned ival=512, jval=1024, kval=4096;
unsigned bufsize;
unsigned swt=get_bufCnt();
switch(swt){
	case ival:		//case标签必须是整型常量表达式, 变量不行
		bufsize = ival * sizeof(int);
		break;
	case jval:
		bufsize = jval * sizeof(int);
		break;
	case kval:
		bufsize = kval * sizeof(int);
		break;
}
*/
#include "TouWenJian_5.h"
/*(c)程序修改后
int main()
{
	unsigned evenCnt=0, oddCnt=0;
	int digit;
	cin>>digit;
	digit %= 10;
	switch(digit){
		case 1: case 3: case 5: case 7: case 9:
			oddCnt++;
			break;
		case 2: case 4: case 6: case 8: case 10:
			evenCnt++;
			break;
	}
	cout<<"evenCnt:\t"<<evenCnt<<endl;
	cout<<"oddCnt:\t\t"<<oddCnt<<endl;
	cout<<endl;
	return 0;
}
*/
//(d)程序修改后
int main()
{
//	unsigned ival=512, jval=1024, kval=4096;//程序编译不通过
//	const unsigned ival=512, jval=1024, kval=4096;//编译通过
	constexpr unsigned ival=512, jval=1024, kval=4096;//编译通过
	unsigned bufsize;
	unsigned swt;
	cin>>swt;
	switch(swt){
		case ival:
			bufsize = ival * sizeof(int);
			break;
		case jval:
			bufsize = jval * sizeof(int);
			break;
		case kval:
			bufsize = kval * sizeof(int);
			break;
	}
	cout<<bufsize<<endl;
	cout<<endl;
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值