做...而循环意外行为

ninjakivi2

快速说明:我想给单词分配随机数,这样每个字母都有不同的数字。为了方便起见,我使用数组而不是单独的一个字母变量。这样,我知道“ abc [1]”是单词“ abc”中的字母“ b”。单词的第一个数字使用不同的范围来避免使用类似“ 075”的数字

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int abc[2];
int def[2];

void setRandom()
{
    abc[0] = rand() %9+1;
    do {abc[1] = rand() %10;} while (abc[1] == abc[0]);
    do {abc[2] = rand() %10;} while (abc[2] == abc[1] || abc[2] == abc[0]);

    printf("RANDOM abc %d %d %d", abc[0], abc[1], abc[2]); //printed just fine.

    do {def[0] = rand() % 9 +1; } while (def[0] == abc[2] || def[0] == abc[1] || def[0] == abc[0]); //code seems to be stuck here
    do {def[1] = rand() %10;} while (def[1] == def[0] || def[1] == abc[2] || def[1] == abc[1] || def[1] == abc[0]);
    do {def[2] = rand() %10;} while (def[2] == def[1] || def[2] == def[0] || def[2] == abc[2] || def[2] == abc[1] || def[2] == abc[0]);

    printf("RANDOM def %d %d %d", def[0], def[1], def[2]); //THIS CODE IS NEVER REACHED. WHY?
}

int main ()
{
    setRandom();
    printf("RANDOM SET");
}

我知道这些数字并不是真正随机的。我知道代码很乱。我知道暴力破解数字是没有效率的。我知道这种设置数字的方法是不好的,但我想不出更好的方法。这段代码可以完成我的工作。

问题是上面的代码在为def [0]生成数字时卡住了;它会无限地生成新的随机数,似乎完全忽略了循环的“ while”部分。

您可能会建议一种更好的方法来做我想做的事情,或者只是解决问题,要么效果都很好,因为该项目并不大,它只是用作难题解决者。

奥利普

C / C ++中的数组是从零开始的。创建abc[2]只给您0和1才能合法访问。数组末尾以外的任何内容都是未定义的行为-在这种情况下,abc[2]第三个元素,而不是第二个元素)可能指向def[0]

修正您的代码,以便两个声明都分配3个元素而不是2个元素。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章