while()语句括号中是一个逻辑表达式,用以判断while循环是否需要继续执行。可以是赋值语句。

while循环的一般格式为:

while(expr)

{

;//body

}

其中用来判断循环条件的expr可以是任意表达式。当其是赋值语句的时候,含义为:先执行赋值语句,然后对左值进行判断。如果左值为0则expr为假,while退出;否则expr为真,while继续循环。

不过直接用赋值语句做expr时,编译器可能为认为赋值操作符=是等于判断符==的误写,这时编译器可能会报一个警告(warning),编译器是否报警,及报警告还是错误(error)取决于编译器设置。为避免这种情况,可以用while((var = expr))的形式,告知编译器就是要先赋值再判断,编译器就不会理会了。

下面是举一个例子用来辅助说明。

函数功能,将参数字符串中的所有值按照ascii码进行累加,获取校验和,溢出后只取低字节值。

char sum(char* p)
{
char c;
char sum = ; while((c = *p ++))//读取字符串中的字符,直到字符串结尾。 这里用的就是一个赋值的方式。先把*p赋值给c,然后执行指针移位,再判断c的值,如果c值为0,代表字符串结束,退出循环。
{
sum+=c;//累加值,不考虑溢出。
} return c;//返回校验和
}
 
 

C语言中,while()语句中使用赋值语句的更多相关文章

  1. C语言中if语句

    C语言if语句后面的表达式 C语言中if关键字之后(即括号内)均为表达式. 该表达式通常是逻辑表达式或关系表达式,但也可以是其它表达式,如赋值表达式等,甚至也可以是一个变量,这些变量的值都换算成了逻辑 ...

  2. Go语言中defer语句使用小结

    defer是Go语言中的延迟执行语句,用来添加函数结束时执行的代码,常用于释放某些已分配的资源.关闭数据库连接.断开socket连接.解锁一个加锁的资源.Go语言机制担保一定会执行defer语句中的代 ...

  3. C语言中while 语句

    while的执行顺序 while 循环的执行顺序非常简单,它的格式是: while (表达式) { 语句: } 概念:当表达式为真,则执行下面的语句:语句执行完之后再判断表达式是否为真,如果为真,再次 ...

  4. C语言中while语句里使用scanf的技巧

    今天友人和我讨论了一段代码,是HDU的OJ上一道题目的解,代码如下 #include<stdio.h> { int a,b; while(~scanf("%d%d",& ...

  5. go语言中strings包中的Trim函数的作用是什么

    答:Trim函数原型如下: func Trim(s string, cutset string) string 去掉字符串s中首部以及尾部与字符串cutset中每个相匹配的字符,如: s=" ...

  6. C语言中math.h中常用的函数

    1.绝对值 ①函数原型: int abs(int x); 函数功能: 求整数x的绝对值 int number=-1234; abs(number); ②函数原型:double fabs(double ...

  7. c语言中sprintf()函数中的%使用

    #include <stdio.h> #include <string.h> int main() { ] = {}; ] = {}; ] = {}; /*打印2个%*/ st ...

  8. go语言中regexp包中的函数和方法

    // regexp.go ------------------------------------------------------------ // 判断在 b 中能否找到正则表达式 patter ...

  9. c语言中printf()函数中的参数计算顺序

    今天看到了一个关于printf()函数计算顺序的问题,首先看一个例子: #include<stdio.h> int main() { printf("%d---%d---%d&q ...

随机推荐

  1. js动态添加事件-事件委托

    作者:白狼 出处:http://www.manks.top/javascript-dynamic-event.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给 ...

  2. Netty:数据处理流程

    Netty作为异步的.事件驱动一个网络通信框架,使用它可以帮助我们快速开发高性能高可靠性的网络服务. 为了更好的使用Netty来解决开发中的问题,学习Netty是很有必要的. Netty现在主流有三个 ...

  3. 关于 AVI 的一些代码

    #ifndef __HSS_AUTO_REVISE_AVI_FRAMERATE_HSS__ #define __HSS_AUTO_REVISE_AVI_FRAMERATE_HSS__ /******* ...

  4. 一枚招聘信息——微信支付web前端开发工程师【已招到】

    已招到 工作地点: 深圳 职位类别: 技术类 招聘人数: 1人 工作职责: 负责微信支付h5应用产品的前端开发:负责微信支付营销活动,h5游戏的开发:负责微信支付内部平台的开发与日常维护 工作要求: ...

  5. Spring.net 配置说明

    Spring.net使用说明   使用方法: 1.在配置文件设置Spring.net 节点  在配置节中,声明Spring.net,配置 context,objects 标签,来源(type) < ...

  6. [LeetCode] Range Sum Query 2D - Immutable 二维区域和检索 - 不可变

    Given a 2D matrix matrix, find the sum of the elements inside the rectangle defined by its upper lef ...

  7. C#进阶系列——WebApi 接口测试工具:WebApiTestClient

    前言:这两天在整WebApi的服务,由于调用方是Android客户端,Android开发人员也不懂C#语法,API里面的接口也不能直接给他们看,没办法,只有整个详细一点的文档呗.由于接口个数有点多,每 ...

  8. 编写轻量ajax组件03-实现(附源码)

    前言 通过前两篇的介绍,我们知道要执行页面对象的方法,核心就是反射,是从请求获取参数并执行指定方法的过程.实际上这和asp.net mvc框架的核心思想很类似,它会解析url,从中获取controll ...

  9. Mysql基本语句的总结

    1---------------创建一个表------------------------------------ drop table if exists 表名 create   table 表名( ...

  10. CDQ分治

    要求可以计算前面的操作对后面询问的贡献 BZOJ1176 #include <cstdio> #include <algorithm> using namespace std; ...