2014-02-11 140 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