2012-12-13 188 views
0

我的程序不断崩溃。代码看起来合法且正确。不知道有什么问题。C程序不断崩溃

#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); 
    } 
} 
+1

也请发表你当它崩溃的错误消息。 – span

回答

7
int permutations=0; 

    average=totalTurns/permutations; 

你除以零。

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

你或许应该从queue()返回permutations值,就像这样:

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

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

哦!那么我应该只是做了一个全局变量。谢谢你的帮助^^ –

2

你应该申报排列为全局变量,即主要功能外还有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); 
    } 
} 
+1

Neater只是为了从'queue()'返回值而不是搞乱全局变量。 –

+1

因为'permutations'和'totalTurns'都应该更新,所以需要返回一个结构或者一个int *'或者传递一个指向其中至少一个的指针。如果你使用全局变量,至少使它们成为'static',所以它们的作用域被限制在编译单元中。 –

+0

@DanielFischer好点,谢谢! – Templar