C++ 如何修复由循环中的错误产生的错误结果?
我的程序必须填充数组唯一值。它的意思是,rand()分配一个随机值数组,然后循环必须控制它C++ 如何修复由循环中的错误产生的错误结果?,c++,arrays,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;
我试着在步骤结束时使用调试,它告诉我一切正常,程序必须正常工作
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;
}
intmain()
{
srand(时间(空));
int值;
常数int size=10;
int数组[大小];
对于(int i=0;i cout您应该在循环结束时递增i
。否则当i++
的结果为10时,数组[i]
具有未定义的行为,因为允许的最大索引为9
正确代码:
array[i] = value;
cout << array[i] << " " << endl;
i++;
数组[i]=值;
在这一部分中:
array[i] = value;
i++;
cout << array[i] << " " << endl;
还有这个部分
value = rand() % 20;
将发射0到19之间的值,而不是1到20之间的值
应该是
value = rand() % 20 + 1;
获取1到20之间的值。您的代码中有些地方出错,可能是通过调试器找到的
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;
}
intmain()
{
标准::srand(时间(空));
int值;
常数int size=10;
int myArray[size]={0};
对于(int i=0;i std::cout“我试着在步骤结束时使用调试,它向我表明一切正常,程序必须正常工作。”你是什么意思?要么正常,要么不正常。调试说一切正常,但不是。“调试控制台出错。我在控制台中达到了-858993460 10次。”(我忘了添加,值必须在1到20之间)我看到了-1票。不应该对新手太苛刻。OP在代码中犯的错误是每个人都会犯的。@MAX777-1并不苛刻。这意味着有一个人发现这个问题值得投否决票。@Leeker你有没有试过将种子点设为0。问题不仅会发生在I=10
@MikeCAT我因为未定义的行为会改变整个程序。例如,当我运行它时,它会打印20个值,而不是10个值。在您修复代码,使array[10]
不执行后,整个程序正常工作。您的建议是正确的。谢谢!
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;
}