2017-02-27 116 views
0

我正在编写一个程序,它使用递归计算给定整数的斐波那契数。我创建了自己的函数'fibonacci',并让程序在循环中运行,如代码中所示。在斐波那契数列中使用switch语句

该程序要我使用switch语句来操作菜单(菜单是用户有两个选择要么选择查找斐波那契或退出程序),我坚持如何使用开关声明为了使用菜单。

下面是我通过Kernighan和Ritchie写了这么远

#include <stdio.h> 

int fibonacci(int num); 

int main(int argc, char const *argv[]) { 
int choice; 
int num; 
int sequence; 

printf("1) Calculate Fibonacci\n"); 
printf("2) Exit\n"); 
scanf("%d", &choice); 

if (choice == 1) 
{ 
    do 
    { 
    printf("Input integer n :\n"); 
    scanf("%d", &num); 

    if (num < 0) 
    { 
     printf("n should be a positive integer (n >= 1). Retry\n"); 
    } 
    } while (num < 0); 
} 

if (choice == 1 && num > 0) 
{ 
    printf("Fibonacci sequence of %d terms\n", num); 
+2

'选择'开关''。 –

+1

我建议你在没有'switch'语句的情况下先使代码正常工作。你不检查'scanf'的返回值来查看你是否有输入。而是检查未初始化的变量'choice'和'num',这些变量在'scanf'失败时是不确定的。 –

回答

0

从“C程序设计语言”的代码:

“switch语句是测试是否多路的决定表达式匹配恒定整数值中的一个,并相应地进行分支。“

所以应该类似​​于此:

while ((choice = getchar())!= EOF){ 
    switch (choice){ 
     case '1': 
      // calculate Fibonacci sequence 
      break; 
     case '2': 
      return 0; 
    } 
} 

由于意见建议,无论是初始化局部变量的开头或检查你的getchar()或scanf的返回值的一个()调用,因为未初始化变量的值是不确定的。

如果你刚刚开始学习C,我建议你阅读我提到的书。它比较短,有很多有用的例子。

+0

我肯定会的。非常感谢你向我解释这个疑问 –

+0

@HelloWorld如果你没有更多的问题,请接受答案 –