关于休息功能和继续功能的澄清

时间:2014-07-10 08:35:00

标签: c while-loop break continue

以下是我的while循环。 fgets == NULL如果我使用continuefgets == NULL将会发生什么?预期解释。

while((len = recv(sock, server_reply, sizeof(server_reply), 0)) > 0) 
{
        printf("point1\n");
        printf("Server reply: %.*s", len, server_reply);
        printf("point2\n");

        printf("Enter message : ");
        printf("point3\n");
        if (fgets(message, sizeof(message), stdin) == NULL)
            break;

        printf("point4\n");

        //send some data
        if( send(sock , message , strlen(message) , 0) < 0)
        {
            puts("Send failed");
            return 1;
        }

          printf("point5\n");

}

1 个答案:

答案 0 :(得分:3)

break语句突破了最近的循环。不,if是条件语句而不是循环语句。循环语句为forwhiledo ... while

continue语句在下一次迭代时继续最接近的循环。


使用break的示例:

printf("before loop\n");

int i = 0;
while (1)  /* an infinite loop */
{
    if (i == 2)
        break;

    printf("i = %d\n", i);
    ++i;  /* increase `i` by one */
}

printf("after loop\n");

如果将上述内容放入程序中,则会打印

before loop
i = 0
i = 1
after loop

使用continue

的示例
printf("before loop\n");

for (int i = 0; i <= 5; ++i)
{
    if ((i % 2) == 0)  /* Check if `i` is even */
        continue;

    printf("i = %d\n", i);
}

printf("after loop\n");

上面的代码将打印

before loop
i = 1
i = 3
i = 5
after loop

当我说“最接近的循环”时,我的意思是如果你有嵌套循环,那是循环中的循环,只有breakcontinue语句所在的循环会受到影响

例如

for (...) /* Some `for` loop */
{
    while (...)
    {
        ...

        for (...)
        {
            ...

            continue; /* will continue the innermost `for` loop only */

            ...
        }

        ...

        break;  /* Will break out of the `while` loop only */

        ...
    }
}