以下是我的while
循环。 fgets == NULL
如果我使用continue
和fgets == 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");
}
答案 0 :(得分:3)
break
语句突破了最近的循环。不,if
是条件语句而不是循环语句。循环语句为for
,while
和do ... 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
当我说“最接近的循环”时,我的意思是如果你有嵌套循环,那是循环中的循环,只有break
或continue
语句所在的循环会受到影响
例如
for (...) /* Some `for` loop */
{
while (...)
{
...
for (...)
{
...
continue; /* will continue the innermost `for` loop only */
...
}
...
break; /* Will break out of the `while` loop only */
...
}
}