源自《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, 本函数的实参是指向变量的指针,这样可以在函数中改变实参的值,从而达到一个函数返回多个值的目的。