C Primer Plus 第6章 C控制语句:循环 6.1 再探while循环

原创
2016/05/26 06:13
阅读数 137

程序清单6.1 summing.c

/*summing.c--对用户输入的整数求和*/
#include <stdio.h>
int main (void)
{
    long num;
    long sum=0L;  /*把sum初始化为0*/
    int status;

    printf("Please enter an integer to be summed.(q to quit):\n");
    status = scanf("%ld",&num);
    while (status==1)
    {
        sum=sum+num;
        printf("Please enter next integer (q to quit):\n");
        status=scanf("%ld",&num);
    }
    printf("Those integer sum to %ld.\n",sum);
    return 0;
}

6.11 程序注释

这个循环的判断表达式是:status==1;==运算符是C的相等运算符。当status的值不为1时终止循环。

要使程序正确运行,在每次循环中应该为num获取一个新值,并且重置status。程序使用scanf()的两个不同的功能做到这一点。首先使用scanf()来尝试为num读入新值,然后使用scanf()的返回值来报告执行是否成功(scanf()返回成功读取项目的个数)。如果您输入的不是一个数字,例如q,那么scanf()就不能读入一个整数,所以它的返回值和status都为0.这将使循环终止 。

如果scanf()在尝试转换一个数值时遇到了问题(例如,检测到文件的尾部或者遇到硬件问题),它就会返回一个特殊值EOF,这个值一般被定义为-1.这个值同样也会导致循环终止。

总之,因为while循环是一个入口条件循环,所以程序必须在进入循环体之前获取输入并检查status的值。这就是程序在while之前有一个scanf()调用的原因。要使循环继续执行,在循环中需要一个读语句,这样程序才可以得到下一个输入的状态。这就是程序在while循环的结尾处还有一个scanf()的原因,它为下一次循环做准备。可以把如下用法做为循环的标准格式:

get first value to be tested

whlie the test is successful

        process value

        get next value

6.1.2 C风格的读循环

下面的结构:

status = scanf("%ld",&num);

while (status==1)

{

        /*loop actions*/

        status == scanf("%ld",&num)

}

可以用下面的形式代替:

while (scanf("%ld",&num)==1)

{

        /* loop actions*/

}

第二种形式同时使用了scanf()的两种不同用法。首先,如果调用成功,函数会把一个值放在num中;第二,函数的返回值(1或0)用来控制循环。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部