gpt4 book ai didi

c - 为什么这个程序有时会无限循环而不总是

转载 作者:太空宇宙 更新时间:2023-11-04 06:13:49 25 4
gpt4 key购买 nike

我成功地解决了 K.N. 的一本名为“C 编程:一种现代方法”的书中的一个编程项目。国王。

程序运行良好,但有时会进入死循环。我不明白这背后的原因。

我使用了一个随机函数,它会给出 0 到 3 之间的随机值,并且我已经使用了足够的条件来处理所有四个随机值。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
char walk[10][10];
int direction,currenti=5,currentj=5;

int i,j;
for(i=0; i<10; i++)
{
for(j=0; j<10; j++)
{
walk[i][j]='.';
}
}
srand((unsigned) time(NULL));
for(i=0; i<26;)
{
direction=rand()%4;
printf("%d ",direction);
if(direction==0&&walk[currenti][currentj-1]=='.'&&(currentj-1)>0&&(currentj-1)<10)
{
currentj=currentj-1;
walk[currenti][currentj]='A'+i;
i++;
}
else if(direction==1&&walk[currenti][currentj+1]=='.'&&(currentj+1)>0&&(currentj+1)<10)
{
currentj=currentj+1;
walk[currenti][currentj]='A'+i;
i++;
}
else if(direction==2&&walk[currenti-1][currentj]=='.'&&(currenti-1)>0&&(currenti-1)<10)
{
currenti=currenti-1;
walk[currenti][currentj]='A'+i;
i++;
}
else if(direction==3&&walk[currenti+1][currentj]=='.'&&(currenti+1)>0&&(currenti+1)<10)
{
currenti=currenti+1;
walk[currenti][currentj-1]='A'+i;
i++;
}
}
for(i=0; i<10; i++)
{
for(j=0; j<10; j++)
{
printf("%c ",walk[i][j]);
}
printf("\n");
}
return 0;
}

最佳答案

只是快速浏览一下,我的猜测是因为在您的主 for 循环中,您只在某些条件下递增 i,而且很可能没有一个递增或满足,这意味着 i++ 将不会被调用。

验证这一点的最佳方法是在您正确处理案例的地方放置一个 else 子句,方法是打印一条消息,或者如果您永远不会到达该案例则放置一个断言。

作为预防措施,当您有 if/else if 子句时,您应该始终有一个 else 子句来处理“if all else fails”值,您可以在其中正确处理错误,或者断言代码是否永远不会到达 else 子句。

此外,作为旁注,您应该考虑使用空格以使您的代码更易于阅读,例如:

if (direction == 3 && walk[currenti + 1][currentj] == '.' && (currenti + 1) > 0 && (currenti + 1) < 10)

关于c - 为什么这个程序有时会无限循环而不总是,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50468789/

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