大神帮我看一下这个代码哪里出问题了啊?

miecuiqi8751 2018-09-06 04:49:06
void getPrime(int n) {
if(n <= 0) return;
bool arr[n+1];

for(int i = 2; i <= n; i++)
arr[i] = true;
for(int i = 2; i <= n; i++) {
if(arr[i]) {
for(int m = i+1; m <= n; m++) {
if(m%i==0)
arr[m]==false;
}
}
}
int cnt = 0;
for(int i = 1; i <= n; i++){
if(arr[i]) {
cout << i << " ";
cnt++;
}
if(cnt%10==0)
cout << endl;
}
cout << endl << cnt << endl;

}

int main()
{
getPrime(10);
return 0;
}
...全文
388 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
汗水与勇气 2018-09-10
  • 打赏
  • 举报
回复
顶楼上,
你这里 bool arr[n+1]; 的n不是常量,数组是不能这样定义的,应该使用动态数组
zhongchengli 2018-09-10
  • 打赏
  • 举报
回复
用数组就用动态数组 ,用其他容器list等。
棉猴 2018-09-07
  • 打赏
  • 举报
回复
getPrime()函数中声明arr数组时有错误。


在声明arr数组时,数组的维数n+1不是常量表达式。
可以考虑使用new实现动态分配内存的方式
void getPrime(int n) {
if (n <= 0) return;
bool *arr = new bool[n + 1];//--------动态分配内存-------

for (int i = 2; i <= n; i++)
arr[i] = true;
for (int i = 2; i <= n; i++) {
if (arr[i]) {
for (int m = i + 1; m <= n; m++) {
if (m%i == 0)
arr[m] == false;
}
}
}
int cnt = 0;
for (int i = 1; i <= n; i++) {
if (arr[i]) {
cout << i << " ";
cnt++;
}
if (cnt % 10 == 0)
cout << endl;
}
cout << endl << cnt << endl;
delete[]arr;//---------释放内存--------------
arr = NULL;//---------复位指针-------------
}

程序运行的效果如下所示

请参考《C++中使用关键字new动态分配数组》
希望能够帮到你
ztenv 版主 2018-09-06
  • 打赏
  • 举报
回复
请说出你的问题

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧