对于C++中的循环增加变量的区别

use*_*426 1 c++ loops

以下两个for循环之间有什么区别?

for(int i = 0; i < 5; i++)
{

}
Run Code Online (Sandbox Code Playgroud)

for(int i = 0; i < 5;)
{
//End of whatever code to do.
 i++;
}
Run Code Online (Sandbox Code Playgroud)

根据http://www.cplusplus.com/doc/tutorial/control/,应该没有区别.然而,当我运行我的代码(下面的代码)时,取决于iter ++的位置,存在差异.

在这个程序中,我有一个单独的线程运行来获取输入.当我将iter ++移到底层时会发生什么,当一个单独的客户端连接到服务器时,我必须在响应之前在cin流中输入一些内容.

当iter ++位于for循环内部时,这个问题不会发生.

我希望我的iter ++位于底部的原因是当我收到断开连接时,我可以删除地图中的会话.

    for (iter = network->sessions.begin(); iter != network->sessions.end(); iter++)
{
    //bool Deleted = false;

    int data_length = network->receiveData(iter->first, network_data);

    if (data_length < 0) 
    {
        //no data recieved
        continue;
    }
    if (data_length == 0)
    {
        printf("Data closed GRACEFULLY LOL \n");
        continue;
    }

    int i = 0;
    while (i < (unsigned int)data_length) 
    {
        packet.deserialize(&(network_data[i]));
        i += sizeof(Packet);

        switch (packet.packet_type) {

            case INIT_CONNECTION:

                printf("server received init packet from client\n");

                char Buffer[100];
                //Buffer to hold char values of client id

                _itoa_s(client_id - 1, Buffer, 10);
                sendActionPackets(client_id - 1, Buffer);

                break;

            case ACTION_EVENT:

                printf("server received action event packet from client\n");

                break;


            case TALK:
                ProcessTalkLine(packet.Message, sizeof(packet.Message), iter->first);
                //sendTalkPackets(packet.Message,sizeof(packet.Message), iter->first);

                break;

            case DISCONNECTING:
                printf("I HAVE RECEIVED DC CONNECT /n");
                char theMessage[MAX_MESSAGE_SIZE];
                sprintf_s(theMessage, "%s has disconnected.", Usernames.find(iter->first)->second.c_str());
                Usernames.erase(iter->first);
                //network->sessions.erase(iter++);

                break;
            default:

                printf("error in packet types\n");

                break;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:感谢@Matt McNabb指出继续将......继续.我也把它放在我的iter ++中,但是在我输入内容之前它不会收到消息的问题依然存在.如果我把forer ++留在for循环中,那么这个问题就不存在了.

M.M*_*M.M 6

当你continue执行第三个语句时for .在你的第一种情况下,这种情况会增加,i而在第二种情况下则没有.

如果不使用continue(或goto),循环将是相同的.