文档章节

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

idreamo
 idreamo
发布于 2016/05/26 06:13
字数 695
阅读 58
收藏 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
348
0
C Primer Plus 第7章 C控制语句:分支和跳转 7.6 continue和break

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

idreamo
2016/06/19
49
0

没有更多内容

加载失败,请刷新页面

加载更多

Redis集群搭建

服务器资源 ip 账号 配置 操作系统 xxx.70 root/xxx 磁盘50G(/)+150G(/home)、内存16G、CPU 16core CentOS Linux release 7.2.1511 (Core) xxx.74 root/xxx 磁盘50G(/)+150G(/home)、......

jxlgzwh
5分钟前
1
0
avro

一、 ```我们已经接触过很多序列化框架(或者集成系统),比如protobuf、hessian、thrift等,它们各有优缺点以及各自的实用场景,Avro也是一个序列化框架,它的设计思想、编程模式都和thi...

hexiaoming123
7分钟前
1
0
QML TextInput的字体超出控件范围

本文链接:https://blog.csdn.net/chyuanrufeng/article/details/54691998 问题描述 :QML TextInput输入内容超过TextInput的大小 当输入过多的字符串时,会出现内容超过TextInput的大小,字...

shzwork
8分钟前
1
0
《Java 8 in Action》Chapter 10:用Optional取代null

1965年,英国一位名为Tony Hoare的计算机科学家在设计ALGOL W语言时提出了null引用的想法。ALGOL W是第一批在堆上分配记录的类型语言之一。Hoare选择null引用这种方式,“只是因为这种方法实...

HelloDeveloper
9分钟前
1
0
进击的 Java ,云原生时代的蜕变

作者| 易立 阿里云资深技术专家<br /> <br />导读:云原生时代的来临,与Java 开发者到底有什么联系?有人说,云原生压根不是为了 Java 存在的。然而,本文的作者却认为云原生时代,Java 依然...

阿里巴巴云原生
12分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部