user-0 提问: 求助，输入大于五的数结果都一样

回复:
user: user-1
content: 引用 6 楼 jfhe_9954 的回复:[quote=引用 5 楼 自信男孩 的回复:] scanf("%d",&n);       //此处 n 值才确定  long  int a[n]; 这样写也是不行的，函数栈是要预先申请空间的，你这样定义的a数组是在栈上申请空间，所以还是不知道申请多大。 编译运行在许多编译器上可以的，栈在那里会留出N个long int的位置给该数组，初学的时候经常在main函数里这样写。可能是main函数的特权吧，或者说是main函数动态执行的？这方面倒是不太清楚。其他的函数里这样干应该不行，还是在堆里开辟自由空间最为合适，或者全局区预先定义好。多谢提醒！[/quote] 不是特权，这样操作有可能会导致程序异常，具有不确定性。

user: user-0
content: 感谢各位大佬，谢谢谢谢

user: user-0
content: 引用 楼主 qq_42440991的回复:#include<stdio.h> int main(){ 	long  int i,sum=0,n; 	long  int a[i]; 	a[1]=1; 	a[2]=1; 	printf("输入n的值为:"); 	scanf("%d",&n); 	switch(n){ 		case 1:printf("%d\n",a[1]); 		printf("sum的值为:"); 		printf("%d",sum+a[1]);break; 		case 2:sum=a[1]+a[2]; 		printf("%d %d %d",a[1],a[2],sum);break;  		default :printf("%d %d ",a[1],a[2]); 			for(i=3;i<=n;i++) 			{ 				a[i]=a[i-1]+a[i-2]; 				sum+=a[i]; 				printf("%d ",a[i]); 			} 			printf("\nsum的值为:"); 			printf("%d",sum+2);break; 	} 	return 0;} 谢谢各位大佬的帮助，我已经成功解决了

user: user-2
content: 引用 5 楼 自信男孩 的回复:scanf("%d",&n);       //此处 n 值才确定  long  int a[n]; 这样写也是不行的，函数栈是要预先申请空间的，你这样定义的a数组是在栈上申请空间，所以还是不知道申请多大。 编译运行在许多编译器上可以的，栈在那里会留出N个long int的位置给该数组，初学的时候经常在main函数里这样写。可能是main函数的特权吧，或者说是main函数动态执行的？这方面倒是不太清楚。其他的函数里这样干应该不行，还是在堆里开辟自由空间最为合适，或者全局区预先定义好。多谢提醒！

user: user-1
content: scanf("%d",&n);       //此处 n 值才确定  long  int a[n]; 这样写也是不行的，函数栈是要预先申请空间的，你这样定义的a数组是在栈上申请空间，所以还是不知道申请多大。

user: user-2
content: #include<stdio.h> int main(){ long  int i,sum=0,n;   //此处 n 还没确定   //printf("%d\n", i);   //i是？ //printf("%d\n", n);   //n是？  //long  int a[i];     //数组大小？个，数组使用前要定义大小，要用n个的话 在后面再定义  printf("输入n的值为:"); scanf("%d",&n);       //此处 n 值才确定  long  int a[n];       //放在已接收到确定值的 n 后面  a[1]=1; a[2]=1; switch(n){ case 1:printf("%d\n",a[1]); printf("sum的值为:"); printf("%d",sum+a[1]);break; case 2:sum=a[1]+a[2]; printf("%d %d %d",a[1],a[2],sum);break;  default :printf("%d %d ",a[1],a[2]); for(i=3;i<=n;i++) { a[i]=a[i-1]+a[i-2]; sum+=a[i]; printf("%d ",a[i]); } printf("\nsum的值为:"); printf("%d",sum+2);break; } return 0;}   这是初学者用的方法，或者说是适合于小数组的写法，在函数栈里声明数组。C或C++定义数组大小都是固定的，不赞成数组大小随意变化，一般用常数先定义好空间大小；若是用变量的话，则变量得有初始值（此处为接收到输入）。上面几楼的大佬们是经验丰富的，用malloc和free在堆里分配大量空间，堆里适合做大量存储, 栈适合少量存储

user: user-3
content: 要么改成long  int a[1000]这种，要么改成楼上所写的动态申请数组

user: user-1
content: #include<stdio.h> #include <stdlib.h>  int main() {     long  int i,sum=0,n;     int *a;     printf("输入n的值为:");     scanf("%ld", &n);     a = (int *)malloc(sizeof(int) * n);     if (!a)         return -1;     a[1] = 1;     a[2] = 1;      switch(n){         case 1:             printf("%d\n", a[1]);                printf("sum的值为:");                printf("%ld", sum+a[1]);                break;          case 2:                sum=a[1]+a[2];                printf("%d %d %ld",a[1],a[2],sum);                break;          default :                printf("%d %d ", a[1],a[2]);                  for(i=3;i<=n;i++)                  {                      a[i]=a[i-1]+a[i-2];                      sum+=a[i];                      printf("%d ",a[i]);                  }                  printf("\nsum的值为:");                  printf("%ld\n",sum+2);                  break;     }     free(a);     return 0; }  供参考～  可变数组C语言不支持，建议用malloc/free