如何消除C语言斐波那契数列输出结果末尾的空格?
解决C语言斐波那契数列输出末尾多余空格的问题
你的代码输出末尾出现多余空格,核心原因是所有元素输出时都在末尾附加了空格,包括最后一个元素。以下是两种简洁的修复方案:
方案一:先输出首元素,后续元素先输出空格再输出数字(推荐)
这种方式无需额外判断,逻辑简洁且高效,从根源避免末尾空格:
#include<stdio.h> void fib(int); int main() { int n = 0; // 修正输入校验条件:统一为1<=n<=70(原代码n=70时会误判为非法输入) while (n < 1 || n > 70) { printf("enter the value(between 1 and 70): "); scanf("%d", &n); if (n < 1 || n > 70) printf("wrong input\n"); } fib(n); return 0; } void fib(int n) { int f[n]; int i; f[0] = 0; // 先输出第一个元素,无前置空格 printf("%d", f[0]); if (n == 1) { return; } f[1] = 1; // 从第二个元素开始,先输出空格再输出数字 printf(" %d", f[1]); for (i = 2; i < n; i++) { f[i] = f[i - 1] + f[i - 2]; printf(" %d", f[i]); } }
方案二:判断是否为最后一个元素,仅非末尾元素附加空格
如果不想调整输出顺序,可以在循环中增加条件判断,不给最后一个元素加空格:
#include<stdio.h> void fib(int); int main() { int n = 0; while (n < 1 || n > 70) { printf("enter the value(between 1 and 70): "); scanf("%d", &n); if (n < 1 || n > 70) printf("wrong input\n"); } fib(n); return 0; } void fib(int n) { int f[n]; int i; f[0] = 0; f[1] = 1; // 去掉末尾的空格 printf("%d %d", f[0], f[1]); for (i = 2; i < n; i++) { f[i] = f[i - 1] + f[i - 2]; // 判断是否为最后一个元素,是则不加空格 if (i == n - 1) { printf("%d", f[i]); } else { printf(" %d", f[i]); } } }
额外说明
原代码的输入校验存在逻辑不一致问题:while条件判断n <=0 || n>70,但if里判断n <=0 || n>=70,导致输入n=70时会被误判为非法输入,已在上述代码中修正。另外,原代码未处理n=0的情况(会导致数组越界),因此将输入范围限定为1到70更合理。
内容的提问来源于stack exchange,提问作者Caro
相关产品推荐
相关产品推荐

