Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C程序不断崩溃_C_Crash - Fatal编程技术网

C程序不断崩溃

C程序不断崩溃,c,crash,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)

我的程序不断崩溃。这些代码似乎是合法和正确的。不知道有什么问题

#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);
    }
}
你在除以零

请注意,您在main中声明的置换变量与队列中声明的变量不同

您可能应该从队列中返回排列值,如下所示:

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

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

您应该将置换声明为全局变量,即在主函数和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);
    }
}

还请发布崩溃时收到的错误消息。请更整洁地从队列中返回值,而不是与全局值混淆。由于排列和totalTurns都应更新,因此需要返回结构或int*,或传入指向其中至少一个的指针。如果你使用globals,至少让它们成为静态的,这样它们的作用域就只限于编译单元了!那么我应该做一个全局变量。谢谢你的帮助^^
#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);
    }
}