码迷,mamicode.com
首页 > 其他好文 > 详细

练习5.13

时间:2018-08-11 22:07:29      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:nbsp   unsigned   eof   signed   ons   char   ufs   int   enc   

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

标签:nbsp   unsigned   eof   signed   ons   char   ufs   int   enc   

原文地址:https://www.cnblogs.com/Dark-King/p/9461091.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!