2014-02-11 136 views
1

對於我的程序的一部分,我收到一個字符數組並檢查是否所有字符都是整數。如何擺脫循環?

當其他程序沒有發送一個整數字符串,如asdf,它捕捉到。但在退出之前,它會循環四次。

如何在讀取第一個字符不是int後立即跳出該段?我已經嘗試了很多東西,但一段時間都陷入了同樣的問題。我覺得這是一個簡單的修復。

編輯:我想它只打印傳入連接收到和無效第一節。然後從那裏繼續。

int iRecvB = recv(acceptSocket, recvSerial, STRLEN, 0); 
    recvSerial[iRecvB] = '\0'; 
    if (iRecvB > 0) 
    { 
     for (int n = 0; n < iRecvB; n++) 
     { 
      if (recvSerial[n] < '0' || recvSerial[n] > '9') 
      { 
       isNumber = false; 
      } 
      if (!isNumber) 
      { 
       int iSend = send(acceptSocket, "no", 2, 0); 
       cout << "\nIncoming connection received.\n" << "Data received:" << endl; 
       cout << "\tSerial: " << recvSerial << endl; 
       cout << "\t INVALID\n" << endl; 
       if (iSend == SOCKET_ERROR) 
       { 
        cerr << "ERROR: Failed to send message11111\n"; 
        cleanup(acceptSocket); 
        return 1; 
       } 
      } 
     }// END OF FOR LOOP FOR NUM CHECK 
    } 
    else if (iRecvB == 0) 
    { 
     cout << "Connection closed\n"; 
     cleanup(acceptSocket); 
     return 0; 
    } 
    else 
    { 
     cerr << "ERROR: Failed to receive message\n"; 
     cleanup(acceptSocket); 
     return 1; 
    } 

這就是控制檯顯示:

Incoming connection received. 
Data received: 
     Serial: asdf 
      INVALID 


Incoming connection received. 
Data received: 
     Serial: asdf 
      INVALID 


Incoming connection received. 
Data received: 
     Serial: asdf 
      INVALID 

ERROR: Failed to send message11111 

C:\Users\Admin\Desktop\Activation\ActivationServer\Debug> 
+0

查找到休息和繼續 – ApproachingDarknessFish

+0

@ValekHalfHeart我做到了。但我似乎無法找到合適的地方放置它們。 – trama

回答

2

可以使用break關鍵字。

例如:

for (int n = 0; n < iRecvB; n++) 
{ 
    if (recvSerial[n] < '0' || recvSerial[n] > '9') 
    { 
     isNumber = false; 
    } 
    if (!isNumber) 
    { 
     int iSend = send(acceptSocket, "no", 2, 0); 
     cout << "\nIncoming connection received.\n" << "Data received:" << endl; 
     cout << "\tSerial: " << recvSerial << endl; 
     cout << "\t INVALID\n" << endl; 
     if (iSend == SOCKET_ERROR) 
     { 
      cerr << "ERROR: Failed to send message11111\n"; 
      cleanup(acceptSocket); 
      return 1; 
     } 

     break; // <-- HERE 
    } 
}// END OF FOR LOOP FOR NUM CHECK 
+0

如果你在那裏放置break語句,那麼if(!isNumber)中的錯誤信息將不會被打印。所以如果(!isNumber)在內部移動。 –

+0

我應該指定我希望它仍然打印INVALID行。但只有一次。 – trama

+0

@PremKumarU謝謝,更新代碼 – rhughes