C程序不断崩溃

时间:2012-12-13 15:54:50

标签: c crash

我的程序一直在崩溃。这些代码似乎合法且正确。不知道有什么问题。

#include <stdio.h>

void queue(int length,int turns){
    int permutations,totalTurns;
    turns++;
    if (length>0){
        queue(length-1,turns);
        if (length>1){
            queue(length-2,turns);
        }
    } 
    else{
        permutations++;
        totalTurns+=turns;
    }
}

int main() 
{
    while(true){
        int length;
        float average;
        int permutations=0;
        int totalTurns=0;

        printf("Queue length: ");
        scanf("%d", &length);
        queue(length,-1);
        average=totalTurns/permutations;
        printf("The average turns are %f", average);
    }
}

2 个答案:

答案 0 :(得分:7)

    int permutations=0;

    average=totalTurns/permutations;

你除以零。

请注意,您在permutations中声明的main()变量与queue()中的变量不同。

您应该从permutations返回queue()值,如下所示:

int queue(int length,int turns){
    int permutations = 0;
    ...
    return permutations;
}

int main(void) {
    ...
    int permutations = queue(length,-1);
}

答案 1 :(得分:2)

你应该将排列声明为全局变量,即在main函数之外以及totalTurns,因为正如其他人所提到的那样它总是0,因为即使你认为它在函数队列中声明它也被遗忘在它之外。

#include <stdio.h>

static int permutations=0;
static int totalTurns=0;


void queue(int length,int turns){
    turns++;
    if (length>0){
        queue(length-1,turns);
        if (length>1){
            queue(length-2,turns);
        }
    } 
    else{
        permutations++;
        totalTurns+=turns;
    }
}

int main() 
{
    while(true){
        int length;
        float average;
        int totalTurns=0;

        printf("Queue length: ");
        scanf("%d", &length);
        queue(length,-1);
        average=totalTurns/permutations;
        printf("The average turns are %f", average);
    }
}