【问题标题】: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(). 的开头另外,如果你打算“创建一个字符串”,那么你必须给它写一个空终止符。
  • 欢迎来到 StackOverflow!请以文本形式发布Minimal Reproducible Example,最短的完整代码,显示您尝试过的内容。最好的方法是通过复制/粘贴,在您检查它确实表现出所描述的行为之后。我建议您使用Tour 并阅读How do I ask a good question?
  • b 是一个等于 100 的全局变量
  • @WeatherVane 我刚刚看到您的评论并添加了一个空终止符,我认为问题已解决,谢谢

标签: c while-loop


【解决方案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 生成的字符)所以循环工作正常:'),问题实际上是我没有添加最后是空终止符。所以我要感谢你的帮助
猜你喜欢
  • 2023-01-12
  • 2016-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多