文档章节

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

idreamo
 idreamo
发布于 2016/05/26 06:13
字数 695
阅读 59
收藏 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)用来控制循环。

© 著作权归作者所有

idreamo
粉丝 18
博文 139
码字总数 224743
作品 0
青岛
产品经理
私信 提问
C Primer Plus 第6章 C控制语句:循环 6.5 for循环

for 循环把所有这三种动作(初始化、测试、更新)都放在一起。通过使用for循环,您可以用程序清单6.11中的程序来代替前一个程序 。 程序清单6.11 sweetie2.c 在关键字for之后的圆括号中包含了...

idreamo
2016/05/31
23
0
C Primer Plus 第11章 11.7 ctype.h字符函数和字符串

第7章“C控制语句 分支和跳转”介绍了ctype.h系列字符相关的函数。这些函数不能被 应用于整个字符串,但是可以被应用于字符串中的个别字符。程序清单11.26定义了一个函数,它把toupper( )函数...

idreamo
2016/08/27
52
0
C Primer Plus 第6章 C控制语句:循环 6.2 while语句

6.2.1 终止while循环 这是对while循环至关重要的一点:当您构造一个while循环时,循环中必须包含能改变判断表达式的值来使表达式的值最终为假。否则循环永远不会终止。 6.2.2 循环何时终止 ...

idreamo
2016/05/26
51
0
C Primer Plus 第9章 函数 9.11 编程练习答案

1、设计函数min(x,y)返回两个double数值中较小的数值,同时用一个驱动程序测试该函数。 2、 设计函数chline(ch,i,j),实现指定字符在i列到j列的输出,同时用一个驱动程序测试该函数。 3、编写...

idreamo
2016/07/19
355
0
C Primer Plus 第7章 C控制语句:分支和跳转 7.6 continue和break

7.6.1 continue语句 该语句可以用于三种循环形式。 当运行到该语句时,它将导致剩余的迭代部分被忽略,并开始下一次的迭代。 如果continue语句处于嵌套结构中,它仅仅影响它的最里层的结构。...

idreamo
2016/06/19
49
0

没有更多内容

加载失败,请刷新页面

加载更多

为构建社交关系链手淘都做了啥?

作者|王卫(泓冰) 出品|阿里巴巴新零售淘系技术部 01、淘宝社交关系推荐的背景 1、互联网下半场到来:互联网的下半场,人口红利消失,各大平台需要对用户做精细化运营,用户的增长和留存是每一...

阿里云官方博客
2分钟前
0
0
Iaas/Paas/Saas有何区别,一个故事告诉你

云计算有三种服务模式,IaaS,PaaS和SaaS。单从英文全称去理解,他们分别是“基础设施即服务”“平台即服务”和“软件即服务”。 这样翻译过来可不好理解,但是我们可以举个例子。现在我们就以...

JEPaaS云平台
10分钟前
1
0
温度传感器怎么测好坏

  温度传感器也就是负温度系数热敏电阻,温度越高,电阻越小,测量时先看其阻值能不能根据温度的变化而变,再看其变化的阻值是不是在标定的范围之内。   有以下四种方法;   1、若是有...

仙溪
10分钟前
0
0
zk中ZooKeeperServer解析

内部类 ChangeRecord 处理PrepRP和FinalRP之间的信息 static class ChangeRecord { ChangeRecord(long zxid, String path, StatPersisted stat, int childCount, List<ACL> acl) {......

writeademo
20分钟前
2
0
LNMP---安装worrdpress、discuz,域名重定向,用户认证,nginx访问日志

4.34 安装wordpress 4.35 安装discuz 4.36 域名重定向 4.37 用户认证 4.38 nginx访问日志 一、安装wordpress 创建博客: 添加一个博客的虚拟主机 blog.tobe.com.conf 做如下更改 安装博客wor...

tobej
22分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部