为啥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循环有时会在满足退出条件之前退出?的主要内容,如果未能解决你的问题,请参考以下文章

掷骰子游戏做while循环不满足退出条件

while和do-while循环结构

java中三种循环的区别

js循环条件满足但是不执行循环内容

为啥 PyQt 有时会在退出时崩溃?

为啥while循环不退出?