我的程序必须填充数组唯一值。意思是,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次。
答案 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;
}