2014-07-10 48 views
-2

以下是我的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

'break'和'continue'不是函數,它們是*報表*。也就是說,它們是由編譯器直接識別的特殊關鍵字。 –

+0

不,函數將*不*退出'if'循環。 「break」僅用於「for」,「while」和「switch」。這有幫助嗎? – usr2564301

+3

使用_simpler_程序自己檢查...'continue'將使用'printf(「point1 \ n」)重新啓動;' –

回答

3

break語句打破了最接近的循環。不,if是一個條件語句而不是循環語句。循環語句是for,whiledo ... 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 */ 

     ... 
    } 
} 
+0

真棒解釋!一切都清楚。非常感謝! – user3751012