为啥while循环有时会在满足退出条件之前退出?
Posted
技术标签:
【中文标题】为啥while循环有时会在满足退出条件之前退出?【英文标题】:Why does while loop sometimes exit before exit condition is met?为什么while循环有时会在满足退出条件之前退出? 【发布时间】:2022-01-22 03:37:16 【问题描述】:我需要创建一个由随机字符组成的可变长度字符串,所以我构建了一个函数来执行此操作,但是,在执行了几次之后,我注意到即使条件仍然不存在,while 循环也会停止执行一开始我有 (j
void gener_observation(char num[b])
int taille,i,j;
srand(time(NULL));
taille = (rand()%(b-40)) + 1;
j=0;
i=0;
while(j <= taille)
i = ((rand()%26) + 65 );
num[j] = i;
j++;
【问题讨论】:
什么是b
?是全球性的吗?调用这个函数时它的值是多少?
除此之外:将srand(time(NULL));
移出函数到main().
的开头另外,如果你打算“创建一个字符串”,那么你必须给它写一个空终止符。
欢迎来到 ***!请以文本形式发布Minimal Reproducible Example,最短的完整代码,显示您尝试过的内容。最好的方法是通过复制/粘贴,在您检查它确实表现出所描述的行为之后。我建议您使用Tour 并阅读How do I ask a good question?
b 是一个等于 100 的全局变量
@WeatherVane 我刚刚看到您的评论并添加了一个空终止符,我认为问题已解决,谢谢
【参考方案1】:
把你的代码变成这样:
void gener_observation(char num[b])
int taille,i,j;
srand(time(NULL));
taille = (rand()%(b-40)) + 1;
j=0;
i=0;
printf("The value of taille equals [%d]", taille);
while(j <= taille)
printf("Currently, j equals [%d]", j);
i = ((rand()%26) + 65 );
num[j] = i;
j++;
printf("Finished");
... 并再次运行您的代码。由于您的代码包含一个随机数,因此可能对我们所有人都不同,但使用打印的结果,您可能会发现您遇到的问题。
【讨论】:
所以 b 当前是全局的 =100 我已经尝试过这样做,并且代码不起作用的示例是 taille =15 并且循环在 j=11 时停止,它不会针对值运行 (12,13,14 ) 和 num 最后会有奇怪的字符 当 taille=15 时,当 j 还没有达到 12 时,你的循环不应该停止。你确定你的应用程序没有崩溃吗? (我添加了一个“已完成”行,你能检查一下你是否看到那行吗?如果不是你的应用程序可能没有停止,而是崩溃了。 是的,我刚刚再次检查了“完成”行,我仍然遇到同样的问题 我刚刚意识到代码向 num 添加了字符(除了那些使用 taille 生成的字符)所以循环工作正常:'),问题实际上是我没有添加最后是空终止符。所以我要感谢你的帮助以上是关于为啥while循环有时会在满足退出条件之前退出?的主要内容,如果未能解决你的问题,请参考以下文章