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上查到详细解释。