### while 语句

在进行一些问题求解时，有些情况下是不能够预知循环次数的，而是需要根据条件的真假来判断是否进行循环。例如，程序中要求随机生成一个合法的端口号，规定小于 1000 的端口号认为是合法的端口号。我们不能够预知需要执行多少次循环之后能够生成合法的端口号，使用 for 循环语句需要在无限循环进行判断，虽然能够实现问题描述，但是不符合“情理”。

在 C++中提供了 while 语句能够根据表达式的真假来确定是否执行循环，其语法格式为：

while (表达式)

语句;

使用 while 语句可以规范地写出获取端口号的代码。

while 语句应用

bool GetPort(int &nPort) //获取端口号的函数

{

int nRet = rand(); //随机生成一个端口号

if (nRet < 1000) //假设端口号小于 1000,表示是合法的端口号

{

nPort = nRet; //返回端口号

return true;

}

return false;

}

int main(int argc, char* argv[])

{

bool bRet = false; //定义一个布尔变量，初始化为 false

int nPort; //定义一个整型变量，记录端口号

while (!bRet) //开始循环，如果 bRet 为 false，执行循环

{ //直到 bRet 为 true

bRet = GetPort(nPort); //调用 GetPort 函数

}

if (bRet) //如果 bRet 为 true

{

cout << "成功获取端口号: " << nPort << endl; //输出端口号

}

return 0;

}

运行程序，效果如图 1 所示。

图 1 利用 while 循环获取端口号

在上面代码中，while 循环结束的条件是 bRet 等于 true，也就是 GetPort 函数的返回值为 true，即 GetPort 函数产生了一个小于 1000 的端口号。

在应用程序中，许多情况下 while 语句和 for 语句是可以互换的。例如，使用 for 语句实现的功能，利用 while 语句同样可以实现。下面利用 while 语句设计一个实例，实现从 1…100 的累加求和运算。

使用 while 语句实现累加求和

int main(int argc, char* argv[])

{

int nSum = 0; //定义一个整型变量，记录累加和的结果

int i = 1;

while (i<101) //设置循环条件

{

nSum += i; //累加求和

i++; //累加 i

}

cout << "结果为: " << nSum << endl; //输出结果

return 0;

}

运行程序，效果如图 2 所示。

图 2 while 循环语句

上述代码的循环结束条件是 i 大于等于 101。

注意：在循环体中需要递增i（i++），否则循环条件永远为true，循环会无休止地进行，成为了死循环。