C++学习笔记26:while 循环

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

        while 循环也是一种入口条件循环,如果测试条件为 true,则执行循环体中的语句,然后返回测试条件,重新评估,直到测试条件为 false,循环终止。while循环的运行如下图所示:

         下面通过一个示例程序了解一下 while 循环的运行:

//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;
}

         上面的程序通过 while 循环遍历字符串,并显示其中的字符及其 ASCII 码,循环在遇到空值字符时停止(C-风格字符串--字符数组,以空值字符 '\0' 结尾,空值字符的编码为 0 或 false),所以上面示例程序中 while 循环也可以修改为 while ( name[ i ] )。

for 与 while

        在C++中,for 和 while 循环本质上是相同的。例如,下面的 for 循环: 
        for ( init_expr; test_expr; update_expr )
        {
                statement(s)
        }

        可以改写成 while 循环:
        init_expr;
        while ( test_expr )
        {
                statement(s)
                update_expr;
        }

        同样,下面的 while 循环:
        while ( test_expr )
                body

        可以改写成 for 循环:
        for ( ; test_expr; )
                body

         for 循环需要3个表达式,不过它们可以是空表达式,只有两个分号是必需的。另外,如果省略 for 循环中的测试表达式,测试结果将为 true,for 循环将一直运行下去。   
        通常,当可以预知循环次数时,使用 for 循环;在无法预知循环次数时,使用 while 循环。

设计循环时的指导原则:

  • 指定循环终止的条件。
  • 在首次测试之前初始化条件。
  • 在条件被再次测试之前更新条件。   

类型别名

         通过一个延时循环的示例程序,了解一下类型别名的概念。

//waiting.cpp -- using clock() in a time-delay loop
#include <iostream>
#include<ctime>

int main()
{
	using namespace std;
	cout << "Enter the delay time, in seconds: ";
	float secs;
	cin >> secs;
	clock_t delay = secs * CLOCKS_PER_SEC;
	cout << "starting\a\n";
	clock_t start = clock();
	while ( clock() - start < delay )
	{
		;
	}
	cout << "done\a\n";
	return 0;
}

        上面的示例程序中,库函数 clock() 返回程序开始执行后所用的系统时间。这里存在两个问题:首先,clock() 返回时间的单位不一定是秒;其次,该函数的返回类型在某些系统上可能是 long,在另一些系统上可能是 unsigned long 或其他类型。
        头文件 ctime 提供了这些问题的解决方案。首先。它定义了一个符号常量——CLOCKS_PER_SEC,该常量等于每秒包含的系统时间单位数,因此用系统时间除以这个值,可以得到秒数;或者将秒数乘以这个值可以得到以系统时间单位为单位的时间。其次,ctime 将 clock_t 作为 clock() 返回类型的别名,这意味着可以将变量声明为 clock_t 类型,编译器将把它转换为 long、unsigned int 或适合系统的其他类型。
        示例程序中的 while 循环的循环体只有一个分号,表示无任何动作的循环。

        C++为类型建立别名的方式有两种。第一种是使用预处理器
        #define BYTE char
        这样,预处理器将在编译程序时用 char 替换所有的 BYTE,从而使 BYTE 成为 char 的别名。
        第二种方法是使用C/C++的关键字 typedef 来创建别名。例如,要将 byte 作为 char 的别名,可以这样做:
        typedef char byte;
        下面是通用格式:
        typedef typeName aliasName;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值