61-C++while循环

                      While循环

  While循环是没有初始化和更新部分的for循环,它只有测试条件和循环体:

while (test-condition)

    body;

  首先,程序计算圆括号内的测试条件表达式,如果该表达式为true,则执行循环体中的语句。与for循环一样,循环体也由一条语句或两个花括号定义的语句块组成。执行完循环体后,程序返回测试i条件,对它进行重新评估。如果该条件为非零,则再次执行循环体。测试和执行将一直进行下去,直到测试条件为false为止。显然,如果希望循环最终能够结束,循环体中的代码必须完成某种影响测试条件表达式的操作。例如,循环可以将测试条件中使用的变量加1或从键盘输入读取一个新值。和for循环一样,while循环也是一种入口条件循环。因此,如果测试条件一开始便为false,则程序将不会执行循环体。

    下面程序使用了while循环。该循环遍历字符串,并显示其中的字符及其ASCLL码。循环在遇到空值字符时停止。这种逐字符遍历字符串直到遇到空值字符的技术是C++处理C-风格字符串的标准方法。由于字符串中包含了结尾标记,因此程序通常不需要知道字符串的长度。

//while.cpp——introducing the while loop
#include<iostream>
const int ArSize = 20;
int main()
{
    using namespace std;
    char name[ArSize];
    cout<<"Your first name , please: ";
    cin>>name;
    cout<<"Here is your name,verticalized and ASCIIized:\n";
    int i=0;
    while(name[i]!='\0')
    {
    	cout<<name[i]<<": "<<int(name[i])<<endl;
    	i++;
	}
    return 0;

}

       下面是该程序的运行情况:

       Verticalized和ASCLLized并不是真正的单词,甚至将来也不会是单词。不过它们确实在输出中都添加了一种“可爱”的氛围。

程序说明

程序中的while条件像这样:

while (name[i] != ‘\0’)

它可以测试数组中特定的字符是不是空值字符。为使该测试最终能够成功,循环体必须修改i的值,这是通过在循环体结尾将i加1来实现的。省略这一步将导致循环停留在同一个数组元素上,打印该字符及其编码,知道强行终止该程序。导致死循环是循环最常见的问题之一。通常,在循环体中忘记更新某个值时,便会出现这种情况。

while(name[i])

可以这样修改后,程序的工作方式将不变。这是由于name[i]是常规字符,其值为该字符的编码——非零值或true。然而,当name[i]为空值字符时,其编码将为0或false。这种表达法更为简洁(也更常用),但没有上面程序的表达法清晰。对于后一种情况,“笨拙”的编译器生成的代码的速度将更快,“聪明”的编译器对于这两个版本生成的代码将相同。

要打印字符的ASCLL码,必须通过强制类型转换将name[i]转换为整型。这样,cout将把值打印成整数,而不是将它解释为字符编码。

不同于C-风格字符串,string对象不使用空字符来标记字符串结尾,因此要将程序转换为使用string类的版本,只需用string对象替换char数组即可。后面将讨论可用于标识string对象中最后一个字符的技术。

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值