gpt4 book ai didi

c++ - 奇怪的 printf 行为

转载 作者:行者123 更新时间:2023-11-28 05:45:48 25 4
gpt4 key购买 nike

我正在编写一个套接字程序,它模拟一个像传递枕头这样的简单游戏。有一个主程序连接到多个播放器程序(它们都连接在一个环形网络中)。主人随机选择一个玩家,并给它枕头可以走的跳数。然后玩家减少啤酒花,将自己的名字放在枕头上并将其传递给随机的相邻玩家。最后,当跳数达到零时,玩家将枕头返回给打印枕头路径的主人。

例如,在 5 人游戏中:假设玩家 3 收到包含“3”(即跳数)的枕头。它将它传递给玩家 2(随机),玩家 2 收到“2$3”(2 跳,玩家 3 在跟踪)。玩家 2 将其传回给玩家 3,后者收到“1$3,2”(1 跳,玩家 3->2)。玩家 3 现在输入自己的名字并将其发回给收到“0$3,2,3”的主人。大师印本。

我在制作枕头时遇到了问题。对于小数字,该程序运行完美(<750 跳)。如果我将它增加到超过 750 跳,那么程序会随机停止在 ~750 跳并直接跳到 0。下面是在播放器的每次迭代中创建马铃薯的代码。它获得类似“4$6,5,6,7,8,9,8”的输入,更改跃点并在末尾添加 id。对于 hops=3,id=7,输出将为“3$6,5,6,7,8,9,8,7”。

void createPotato(int id, int hops, char pot[20000])
{
int i, j;
char t[20000];
char d[10];

strcpy(t, pot);
for(j = 0; t[j] && t[j] != '$'; j++);

snprintf(pot, 20000, "%d", hops);
for(i = 0; i < 20000; i++)
if(pot[i] == '\0')
break;
pot[i++] = '$';

if(t[j])
{
for(j = j + 1; t[j]; j++)
pot[i++] = t[j];
pot[i++] = ',';
}

snprintf(d, 10, "%d", id);
for(j = 0; d[j]; j++)
pot[i++] = d[j];

pot[i] = '\0';
}

int getHopsFromPotato(char pot[20000])
{
char t[20000];
strcpy(t, pot);
char *hops = strtok(t, "$");
return atoi(hops);
}

有趣的是:如果我修改上面的代码,将“id”添加到“pot”的部分更改为以下内容,它就可以工作。

snprintf(d, 10, "%d", id);
for(j = 0; d[j]; j++)
pot[i++] = d[j];

pot[i++] = '0';

然后就可以了。如果我把它改成

pot[i++] = '2';

然后它也起作用了。但是,当我将其更改为

pot[i++] = '1';

然后执行在约 750 跳后停止。我什至无法开始解决这个问题。不确定我是否提供了足够的细节或者我什至应该提供什么。如果有帮助,输出如下。

对于 players=2,hops= 1000(其中 pot[i++] = '0')

Pot: 268$1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
Hops: 268

Pot: 266$1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1
Hops: 266
Pot: 0$1

在266之后,它突然跳过它之后的所有跃点,删除Pot然后将它返回给master。

如果我需要添加任何详细信息,请告诉我。我没有添加完整的代码,因为它太长了。

最佳答案

由于您是在套接字上写入土 bean ,很可能随着它变大,您最终会达到操作系统在单个 send/ 中发送的数量的限制recv 调用。确保您的套接字处理代码检查返回值以查看实际收到了多少数据,并在必要时再次调用 recv

该问题可能是不确定的,实际上与您存储在数组中的实际值无关。您所描述的更改将导致生成相同的机器代码,并在相同的时间内运行。然而,网络始终是不确定的。

关于c++ - 奇怪的 printf 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36242779/

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