C++ 程序未正确加载数组

C++ 程序未正确加载数组,c++,C++,手头的问题:编写一个函数primeTableInRange来生成一个表,以显示从startNum到endNum范围内的每个数字是否都是素数。当数字不是质数时,我们将只显示一个“*”。当数字是质数时,我们将显示该数字 我的代码: #include <iostream> #include <ctime> #include <cmath> #include <cstdlib> using namespace std; int primetablei

手头的问题:编写一个函数primeTableInRange来生成一个表,以显示从startNum到endNum范围内的每个数字是否都是素数。当数字不是质数时,我们将只显示一个“*”。当数字是质数时,我们将显示该数字

我的代码:

#include <iostream>
#include <ctime>
#include <cmath>
#include <cstdlib>


using namespace std;

int primetableinarray(int userarray[], int arraysize);

int main()
{
int startNum, endNum;
cout<< "Enter your first number in the range" << endl;
cin>>startNum;
cout<< "Enter your last number in the range" << endl;
cin>>endNum;

int arraysize = endNum - startNum;
int userarray[arraysize];
for (int i=startNum;i<=endNum;i++)
userarray[i]= startNum++;
primetableinarray(userarray, arraysize);
return 0;
}

int primetableinarray(int userarray[], int arraysize)
{

for (int i=2;i<arraysize;i++)
{
bool prime=true;
for (int r=2;r*r<i;r++)
{
    if (i % r ==0)
    {
        prime=false;
        break;
    }
}
if(prime) cout << i << endl;

else
    if(true) cout<< "*" << endl;
}
}
#包括
#包括
#包括
#包括
使用名称空间std;
int primetableinarray(int userarray[],int arraysize);
int main()
{
int startNum,endNum;
苦瓜;
香豆素;
int arraysize=endNum-startNum;
int userarray[arraysize];

对于(int i=startNum;i要小心!在您的情况下,数组总是从0开始,在
arraysize
结束。您不能有任意索引。您可以执行以下操作:

int arraysize = endNum - startNum + 1;
int userarray[arraysize];
for (int i=0;i<arraysize;i++)
   userarray[i]= startNum+i;
int arraysize=endNum-startNum+1;
int userarray[arraysize];
对于(int i=0;i尝试更改此值
发件人:

用于(int r=2;r*r
#包括
#包括
#包括
#包括
使用名称空间std;
int primetableinarray(int userarray[],int arraysize);
int main()
{
int startNum,endNum;
苦瓜;
香豆素;
int arraysize=endNum-startNum+1;
int userarray[arraysize];

对于(int i=startNum;i在你的打印函数中,你根本不知道你的数组。你只是开始循环数字到你的数组大小。如果你把数组从函数参数中去掉,它仍然可以工作,那么为什么你要把它包括进来呢?你的for循环只是忽略数组中的任何值,然后从2开始任意循环


至于为什么4被计算为素数,这是因为当第二个循环开始时,它看到2*2=4,因此不小于4,这是您正在测试的数字。这导致它跳过循环,并且从不将素数设置为false。将第二个for循环中的条件设置为数组的声明(
int userarray[arraysize];
)是非法的,需要在编译时知道数组边界。这甚至不应该编译,否则它会生成零大小的数组。
之后,您随机访问未分配的内存,这是UB的变化

int arraysize = endNum - startNum + 1;
int userarray[arraysize];

另外,向primetableinarray函数添加一个返回值。

这是正确的程序。
#包括
使用名称空间std;
虚空素数表射线(整数低,整数高);
int main()
{
int低,高,i,标志;
cout>低;
cout>高;

cout请添加一些描述您正在做什么。更改“for(int r=2;r*rchange”int arraysize=endNum-startNum;”到 "int arraysize=endNum-startNum+1;”
for (int r=2;r<i;r++)
#include <iostream>
#include <ctime>
#include <cmath>
#include <cstdlib>


using namespace std;

int primetableinarray(int userarray[], int arraysize);

int main()
{
int startNum, endNum;
cout<< "Enter your first number in the range" << endl;
cin>>startNum;
cout<< "Enter your last number in the range" << endl;
cin>>endNum;

int arraysize = endNum - startNum  + 1;
int userarray[arraysize];
for (int i=startNum;i<endNum;i++)
userarray[i]= startNum++;
primetableinarray(userarray, arraysize);
return 0;
}

int primetableinarray(int userarray[], int arraysize)
{

for (int i=2;i<=arraysize;i++)
{
bool prime=true;
for (int r=2;r<i;r++)
{
    if (i % r ==0)
    {
        prime=false;
        break;
    }
}
if(prime) cout << i << endl;

else
    if(true) cout<< "*" << endl;
}
}
int arraysize = endNum - startNum + 1;
int userarray[arraysize];
int userarray[1];
int arraysize = endNum - startNum;
userarray[arraysize];