C ++不需要返回值

时间:2013-08-17 14:16:01

标签: c++ arrays pointers return

我正在尝试一些练习来学习使用带有数组和函数的指针。 所以我试着编写一个“奇怪的方法”来找出一定范围内的素数。

问题是输出总是使用素数算法添加函数的返回值。如果我省略它,它显示为'32767',如果我写return *pt,它会添加范围的最后一个数字,即使它不是素数!

刚刚用6号试了一下:它不是一个素数,但它弹出来了!

#include <iostream>
int show_primes(const int * begin, const int * end);
int main()
{
    using namespace std;
    int i = 0;
    int End_Array = 0;
    cout << "Write the last number in your range (it always start from number 2)";
    cin >> End_Array;
    i=End_Array;
    int cookies[i];
    for(i=-1; i<End_Array; i++)
       cookies[i] = i+1;
    cout << show_primes(cookies, cookies + End_Array-1);
}
int show_primes (const int * begin, const int * end)
{
    using namespace std;
    const int * pt;
    int z = 0;
    for (pt = begin; pt < end; pt++, z=0)
    {
        for (int n=2; n<=*pt; n++)
        if ( *pt%n == 0 )
            ++z;
        if (z==1)
            cout << *pt <<endl;
    }
    return *pt ;
}

2 个答案:

答案 0 :(得分:1)

您的循环正在访问负索引值。

 cookies[i] = i+1;   //For first iteration, value of i is -1

因此for(i=-1; i<End_Array; i++)应更改为for(i=0; i<End_Array; i++)

此外,您不需要在函数内返回

虽然您正在使用指针进行学习,但更简单的实现方式是:

#include <iostream>
using namespace std;
void show_primes(int num)
{
    bool flag = false;
    for (int pt = 2; pt < num; pt++)
    {
        if ( num%pt == 0 )
        {
            flag = true;
            break;
        }
    }
    if(!flag)
    {
        cout<<num<<' ';
    }
}
int main()
{
    int End_Array = 0;
    cout << "Write the last number in your range(>2)";
    cin >> End_Array;
    for(int i=2; i<End_Array; i++)
    {
        show_primes(i);
    }
}

P.S。:有人可以强调,如OP所做的那样,在每个功能块中包含std命名空间是不好的做法。(我认为是)

答案 1 :(得分:0)

 for(i=0; i<End_Array; i++) // Start from zero
    cookies[i] = i; //Use i

 // Don't use cout
 show_primes(cookies, cookies + End_Array-1);