这是我关于Stackoverflow的第一个问题,所以如果我做错了,请原谅。你能用这段代码帮我吗?谢谢! :)
#include <iostream>
using namespace std;
1)
int divisor(int a) // function that checks the divisors of a number *)
{
int i=1; // counter
while(i<=a) // while the counter is less than the number given
{
int i;
if(primes(i)) // here i get the error "primes was not declared in this scope
{
if(a%i==0) // if the remainder of the operation is 0, the number is a divisor
{
cout<<"The divisors of the number are: "<<i<<endl; // prints the divisors
++i; // counter is incremented
}
}
else // else it is not, and the counter i is incremented
{
++i;
}
}
}
2)
int primes(int number) // checks if a number is prime
{
int i;
for(i=2;i<number;i++) // for loop until the counter i is less than a number
{
if(number%i==0) // if the remainder of the operation is 0, the number is not prime
{
break;
}
else //else the number is prime
cout<<number;
break;
}
}
}
3)
int main()
{
int n,i;
cout<<"Give the number: ";
cin>>n;
for(i=2;i<n;i++)
{
divisor(n);
}
}
答案 0 :(得分:2)
有几个问题:
1)您需要在primes()
之前转发声明divisors()
:
int primes(int number);
2)您的primes()
函数无法返回值。
3)并非divisor()
中的所有代码路径都会增加i
。
我确信还有更多问题,但这应该让你开始......
答案 1 :(得分:0)
假设您在上面给出的顺序与您在文件中使用的顺序相同,问题是您的除数函数首先出现并使用稍后声明的primes函数。最简单的(也是我最常见的)解决方案是使用“foward-delcaration”。这意味着您在文件顶部指出:
int divisor(int);
int primes(int);
此外,您忘记了primes()返回一个值。 (因为这个问题被标记为 C ++,您甚至可以考虑让它返回bool而不是int)。
同样在素数中,else子句现在会导致休息,但我不认为这是完全明智的。像9这样的数字在除以2时会在该子句中结束,但是它不能被2整除的事实并不会使它成为主要的......
在寻找素数方面还有其他“智能技巧”,但也许这不属于这个问题的范围。