You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何消除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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 20:54:18