命令在调用方法时终止

时间:2016-01-09 15:00:49

标签: c++

调用此方法后:

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;
}

1 个答案:

答案 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)后,它们会被操作系统刷新一段时间或刷新一段时间。