从输入流中读取整形和浮点型数据存储在实参所指的内存空间中

来源:互联网 发布:水晶内雕 软件 编辑:程序博客网 时间:2024/04/30 09:38

     源自《The C Programming Language》P83 pr5-2:

 

    模仿函数getInt 的实现方法,编写一个读取浮点数的函数getFloat,getFloat函数的返回值应该是什么类型呢?

    代码:

     

    分析:

   

    疑问:关于MAX_FLT定义:当arr_flt定义为float型数组时,if(arr_flt[n] == MAX_FLT)会失效,

             而定义为double型数组时,则有效,如果如上句那样定义MAX_FLT=2147483648则不会出现失效这个问题?

 

    易错:关于continue语句用在while循环和for循环中差异:

             for(n = 0; n < SIZE && ((reNum = getFloat(&arr_flt[n])) != EOF); ++n)

                   if(arr_flt[n] == MAX_FLT)

                       continue;

             for循环中continue语句是直接跳到++n处执行,如果不想跳转到此处而是直接跳到条件测试部分,应该用while循环(如下代码)

              n = 0;
              while(n < SIZE && ((reNum = getFloat(&arr_flt[n])) != EOF))
              {
                  if(arr_flt[n] == MAX_FLT)
                        continue;
                  ++n;
              }

 

     函数分析:getInt:

                    1,  丢弃字符序列头部的空白字符;

                    2,  分四种情况:isdigit(c),c == EOF, c == '+',c == '-'进行处理,

                         当不满足这四种情况时if(!isdigit(c) && c != EOF && c != '+' && c != '-'),说明c是其他字符(不包含空白字符)

                         将c其保存在*pNum中;

                         然后依次按照这四种情况分别进行处理('+', '-'一起处理)。

                    3,  本函数的实参是指向变量的指针,这样可以在函数中改变实参的值,从而达到一个函数返回多个值的目的。