我该如何解决由于循环错误而产生的错误结果?

时间:2019-10-08 13:07:05

标签: c++ arrays

我的程序必须填充数组唯一值。意思是,rand()分配随机值数组,然后,循环必须对其进行控制。

我尝试在逐步使用调试的过程中发现,一切正常,程序必须正确运行。

int main()
{
    srand(time(NULL));
    int value;
    const int size = 10;
    int array[size];

    for (int i = 0; i < size;) {
        bool alreadyThere = false;
        value = rand() % 20;

        for (int j = 0; j < i; j++) {
            if (value == array[j]) {
                alreadyThere = true;
                break;
            }
        }

        if (!alreadyThere) {
            array[i] = value;
            i++;
            cout << array[i] << " " << endl;
        }
    }

    return 0;
}

调试控制台错误。我在控制台中达到-858993460 10次。

3 个答案:

答案 0 :(得分:3)

在这一部分:

            array[i] = value;
            i++;
            cout << array[i] << " " << endl;

您在打印分配的值之前先进行i++;, 因此会打印出新位置中未初始化(不确定)的值。

应该是:

            array[i] = value;
            cout << array[i] << " " << endl;
            i++;

这部分

        value = rand() % 20;

将发出0到19,而不是1到20的值。

应该是

    value = rand() % 20 + 1;

获取1到20之间的值。

答案 1 :(得分:0)

您应在循环结束时增加i。否则,array[i]的结果为10时,i++的行为不确定,因为允许的最大索引为9。

正确的代码:

array[i] = value;
cout << array[i] << " " << endl;
i++;

答案 2 :(得分:-1)

您的代码有误,可能已在调试器中找到。

  • array从未被初始化(因此充满了垃圾)。所以比较value == array[j]是错误的
  • i++;的位置错误,应该在std :: cout之后

示例:

int main()
{
    std::srand(time(NULL));
    int value;
    const int size = 10;
    int myArray[size] = {0};

    for (int i = 0; i < size;) {
        bool alreadyThere = false;
        value = std::rand() % 20;

        for (int j = 0; j < i; j++) {
            if (value == myArray[j]) {
                alreadyThere = true;
                break;
            }
        }

        if (!alreadyThere) {
            myArray[i] = value;            
            std::cout << myArray[i] << " " << std::endl;
            i++;
        }
    }

    return 0;
}
相关问题