[英]c++ program return “0 0” instead of returning prime numbers. Why does it not get the correct output from the “prime” function?
我的 function “素數”采用動態數組並返回一個僅由素數組成的動態分配數組。 但是當它返回到main時,它給出了錯誤的output並打印
Output:
0 0
預期 Output:
2 3
我的代碼:
#include<stdio.h>
#include<math.h>
#include <cstdio>
#include<iostream>
using namespace std;
const int capacity = 10000;
int * prime(int numbers[capacity])
{
int *primeArray;
primeArray = new int[capacity];
int lenghtOfArray=sizeof(primeArray)/sizeof(int);
int counter = 0;
for(int index=0;index<lenghtOfArray;index++){
// 0 and 1 are not prime numbers
if (numbers[index] == 0 || numbers[index] == 1) {
continue;
}
else {
for (int i = 2; i <= numbers[index] / 2; ++i) {
if (numbers[index] % i == 0) {
primeArray[counter] = numbers[index];
counter = counter + 1;
break;
}
}
}
}
return primeArray;
}
main()
{
int *mynumbers;
mynumbers = new int[capacity];
mynumbers[0] = 1;
mynumbers[1] = 2;
mynumbers[2] = 3;
mynumbers[3] = 4;
mynumbers[4] = 5;
mynumbers[5] = 6;
int* myprime = prime(mynumbers);
cout << myprime[0] << " " << myprime[1];
}
什么地方出了錯?
int lenghtOfArray=sizeof(primeArray)/sizeof(int);
獲取動態分配數組的長度是錯誤的方法。
sizeof(primeArray)
不是分配的大小,而是指針的大小。
您已經有了數組元素的數量,因此使用它來獲取數組的長度:
int lenghtOfArray=capacity;
但這不會使您的代碼正確,因為現在您的代碼將使用int
數組的未初始化元素的不確定值。 您要做的就是將有效元素的數量傳遞給 function。
改變點:
// add argument to pass the number of data
// int * prime(int numbers[capacity])
int * prime(int numbers[capacity], int num_numbers)
{
int *primeArray;
primeArray = new int[capacity];
// use the passed number
// int lenghtOfArray=sizeof(primeArray)/sizeof(int);
int lenghtOfArray=num_numbers;
// pass the number of data
// int* myprime = prime(mynumbers);
int* myprime = prime(mynumbers, 6);
cout << myprime[0] << " " << myprime[1];
}
另一點是您的代碼正在存儲不是素數而不是素數的數字。
而不是這個
for (int i = 2; i <= numbers[index] / 2; ++i) {
if (numbers[index] % i == 0) {
primeArray[counter] = numbers[index];
counter = counter + 1;
break;
}
}
你應該用這個
// add the number for now
primeArray[counter] = numbers[index];
counter = counter + 1;
for (int i = 2; i <= numbers[index] / 2; ++i) {
if (numbers[index] % i == 0) {
// it is not actually a prime, rollback
counter = counter - 1;
break;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.