do-while循环的活用

do-while循环是 while 循环的变体。

在检查while()条件是否为真之前,该循环首先会执行一次do{}之内的语句。

然后在while()内检查条件是否为真,如果条件为真的话,就会重复do-while这个循环,直至while()为假。

while循环则是先判断条件是否为真,再进行循环。

 

根据do-while循环的特点,可以对其进行活用,以减少在包含大量if判断语句的程序中大量使用return的问题。

同时还可以避免goto的使用。

 

以套接字socket函数为例。

#include <stdio.h>													
#include <WinSock2.h>					//调用socket函数需要该头文件

int main(int argc, char* argv[])
{
	SOCKET ServerSocket = 0;			//最好在SOCKET类型变量声明时赋初值,便于释放资源时进行判断

	do
	{
		ServerSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	    /*ServerSocket为socket函数的返回值,该函数包含3个参数,分别为(Internet地址描述,socket类型TCP或UDP,协议类型)*/

		if (INVALID_SOCKET == ServerSocket)		/*若无错误发生,socket()返回引用新套接口的描述字。否则的话,返回INVALID_SOCKET错误。
												此处如果满足条件socket申请失败,则跳出循环*/
		{                                       
			printf("Socket invoke failed !\n");
			break;
		}

		while (1)			//常用的死循环表达方式
		{
			/* ...... */
		}
	} while (0);		    /*do-while循环若while判断条件为0,则该循环只有第一次能够执行。 
	                          将整段函数置于do-while中,break的使用,可以在满足判断条件的情况下直接跳到代码尾部。*/

	if (ServerSocket)		//即(ServerSocket != 0),也就是在申请到socket的情况下,使用closesocket关闭后再退出,以达到施放资源的效果。
	{
		closesocket(ServerSocket);
	}
	return 0;

在使用一个不熟悉的函数时,需要确认以下几点:

1.该函数是否有返回值。如有返回值,其类型是什么,代表什么。

2.使用该函数需要用到几个参数,参数的数据类型及含义。

 

Windows API可以在微软官网https://docs.microsoft.com上查到详细解释。