gpt4 book ai didi

c++ - C++ 中的 For Loop 变量递增位置的区别

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:26:01 26 4
gpt4 key购买 nike

下面两个for循环有什么区别?

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

}

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

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

在这个程序中,我有一个单独的线程运行来获取输入。当我将 iter++ 移到底部时发生的事情是,当一个单独的客户端连接到服务器时,我必须在 cin 流中输入一些东西才能响应。

当iter++在for循环的最顶端时,不会出现这个问题。

我希望 iter++ 位于底部的原因是当我收到断开连接时,我可以删除我的 map 中的 session 。

    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;
}
}
}

编辑:感谢@Matt McNabb 指出继续将......继续。我也在那里放入了我的 iter++,但是在我放入一些东西之前它不会收到消息的问题仍然存在。如果我将 iter++ 留在 for 循环中,这个问题就不存在了。

最佳答案

当您continue 时,它会执行for 中的第三条语句。在您的第一种情况下,这会增加 i 而在第二种情况下则不会。

仅当您不使用 continue(或 goto)时,循环才相同。

关于c++ - C++ 中的 For Loop 变量递增位置的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26905567/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com