IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

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

    summer发表于 2016-05-25 22:14:41
    love 0

    程序清单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)用来控制循环。



沪ICP备19023445号-2号
友情链接