练习5.13
Posted dark-king
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了练习5.13相关的知识,希望对你有一定的参考价值。
5.13:下面显示的每个程序都含有一个常见的编程错误,指出错误在哪里,然后修改它们。
(a) unsigned aCnt=0, eCnt= 0,iouCnt=0;
char ch = next_text();
switch (ch) {
case ‘a‘ : aCnt++;
case ‘e‘ : eCnt++;
default : iouCnt++;
}
(b)unsigned index = some_value();
switch (index) {
case 1 :
int ix=get_value();
ivec[ ix ] = index;
break;
default :
ix = ivec.size() -1;
ivec [ ix ] = index;
}
(c)unsigned evenCnt = 0,oddCnt = 0;
int digit = get_num()%10;
switch (digit) {
case 1,3,5,7,9:
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 :
buffsize=ival * sizeof(int);
break;
case jval :
buffsize = jval * sizeof(int);
break;
case kval :
bufsize = kval *sizeof(int);
break;
}
Ans:a)如果输入的是a,那么所有的计数变量(aCnt、eCnt、iouCnt)都会递增;如果输入的是b,那么计数变量(eCnt、iouCnt)都会递增。
修改后的程序:
unsigned aCnt=0, eCnt= 0,iouCnt=0;
char ch = next_text();
switch (ch) {
case ‘a‘ : aCnt++;
break;
case ‘e‘ : eCnt++;
break;
default : iouCnt++;
break;
}
b)C++语言规定不允许跨过一个初始化的变量,而跳转到使用这个变量的地方,而该程序可能发生跳转。
修改之后:
unsigned index = some_value();
int ix=get_value();
switch (index) {
case 1 :
ivec[ ix ] = index;
break;
default :
ix = ivec.size() -1;
ivec [ ix ] = index;
}
c)C++规定case标签后面只能放一个值。
修改后:
unsigned evenCnt = 0,oddCnt = 0;
int digit = get_num()%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;
}
d)case标签后面应该是整型常量表达式,而该程序的case标签后面的值不是常量。
修改后:
const unsigned ival =512, jval=1024,kval=4096;
unsigned bufsize;
unsigned swt = get_bufCnt();
switch(swt) {
case ival :
buffsize=ival * sizeof(int);
break;
case jval :
buffsize = jval * sizeof(int);
break;
case kval :
bufsize = kval *sizeof(int);
break;
}
以上是关于练习5.13的主要内容,如果未能解决你的问题,请参考以下文章