调用此方法后:
vector<int> primeFactors(int n)
{
printf("got this far");
vector<int> result;
for(int i = 0; i < nPrimes; i++)
{
printf("%d %d", nPrimes, primes[i]);
if(n % i == 0)
{
printf("i = %d", i);
n /= i;
result.push_back(primes[i]);
i = 0;
}
}
return result;
}
我终止命令而不打印got this far
我在主方法中调用它:
int main()
{
int n;
scanf("%d", &n);
primeFactors(n);
return 0;
}
任何帮助都将不胜感激。
更新:
所以问题是我最终进入了一个infite循环,由g ++检查导致它终止。无限循环是由一些错误引起的:基本上使用i
而不是primes[i]
这里是完全正确的代码:
vector<int> primeFactors(int n)
{
vector<int> result;
for(int i = 0; i < nPrimes && n > 1; i++)
{
if(n % primes[i] == 0)
{
n /= primes[i];
result.push_back(primes[i]);
i = -1;
}
}
return result;
}
答案 0 :(得分:0)
我认为这是代码中的错误:
在调用此函数期间:
vector<int> primeFactors(int n)
{
printf("got this far");
vector<int> result;
for(int i = 0; i < nPrimes; i++)
{
printf("%d %d", nPrimes, primes[i]);
if(n % i == 0)
{
printf("i = %d", i);
n /= i;
此处i
为0因此会导致因为除以零而导致崩溃。您没有输出printf
的原因,因为stdout
缓冲区未被刷新。在flush()
调用后使用printf()
来刷新缓冲区或在可打印字符串中插入换行符:
printf("got this far\n");
P.S。 I / O操作被缓冲。在显式询问(sync / fsync / flush)后,它们会被操作系统刷新一段时间或刷新一段时间。