C语言之妙:scanf 的双重作用( 二 )


总之 , 因为while循环是入口条件循环 , 程序在进入循环体之前必须获取输入的数据并检查status的值 , 所以在while前面要有一个scanf() 。要让循环继续执行 , 在循环内需要一个读取数据的语句 , 这样程序才能获取下一个status的值 , 所以在while循环末尾还要有一个scanf() , 它为下一次迭代做好了准备 。可以把下面的伪代码作为while循环的标准格式:
get first value to be testedwhile the test is successfulprocess valueget next valueC 风格读取循环根据伪代码的设计思路 , 程序清单6.1可以用Pascal、BASIC或FORTRAN来编写 。但是C更为简洁 , 下面的代码:
status = scanf("%ld", &num);while (status == 1){/* loop actions */status = scanf("%ld", &num);}// can be replaced by the following:while (scanf("%ld", &num) == 1){/* loop actions */}第二种形式同时使用scanf()的两种不同的特性 。
首先 , 如果函数调用成功 , scanf()会把一个值存入num 。
然后 , 利用scanf()的返回值(0或1 , 不是num的值)控制while循环 。
因为每次迭代都会判断循环的条件 , 所以每次迭代都要调用scanf()读取新的num值来做判断 。换句话说 , C的语法特性让你可以用下面的精简版本替换标准版本 。

【C语言之妙:scanf 的双重作用】


推荐阅读