一串数字不输出末尾空格

题目中通常要求输出的 n 个数字,两个数字之间用一个空格分隔,开头结尾没有空格。如果直接 printf("%d ", n) 的话,则会在末尾多出一个空格,本文讲述几种不留空格的方式和一个误区。

不留空格的方式

  1. 方法一: 数列长度不确定的情况。设置标记,输出第一个数的时候后边不带空格,输出 2~n 个数的时候在数前边带空格。如下面代码中的 firstPrint。
  2. 方法二: 已知数列长度的情况。当输出第 1~n-1 个数的时候在数后边带空格,输出第 n 个数的时候在数后边不带空格。因此需要用下标判断i是不是头/尾的数。当然已知数列长度的情况也可以采取方法一
#include <stdio.h>
int main() {
    double balance[5] = {1000.56, 2.9, 3.4, 7.2, 59.8};
    int len = 4;
    // 末尾会多一个空格
    for (int i = 0; i <= len; i++) {
        printf("%g ", balance[i]);
    }
    printf("<- space there?\n");

    // 末尾不会多一个空格的方法 1
    int firstPrint = 0;
    for (int i = 0; i <= len; i++) {
        if (firstPrint == 0) {
            printf("%g", balance[i]);
            firstPrint = 1;
        } else {
            printf(" %g", balance[i]);
        }
    }
    printf("<- space there?\n");

    // 末尾不会多一个空格的方法 2
    for (int i = 0; i <= len; i++) {
        if (i == len) {
            printf("%g", balance[i]);
        } else {
            printf("%g ", balance[i]);
        }
    }
    printf("<- space there?\n");
    return 0;
}

误区

\b 可以删掉多余的一个空格,实际上不是的,只是移动了光标位置,输出的内容并没有被删除,见下面代码

C语言中的转义字符\b的含义 码农哈里 2019-06-03

总结:\b的含义是,将光标从当前位置向前(左)移动一个字符(遇到\n或\r则停止移动),并从此位置开始输出后面的字符(空字符\0和换行符\n除外)。

#include <stdio.h>
int main() {
    double balance[5] = {1000.56, 2.9, 3.4, 7.2, 59.8};
    int len = 4;
    printf("请注意观察下面,看上去末尾没有多一个空格\n");
    for (int i = 0; i <= len; i++) {
        printf("%g ", balance[i]);
    }
    printf("\b"); // C语言中的转义字符\b
    printf("<- space there?\n");

    printf("请注意观察下面5是否被删除了?\n");
    printf("12345");
    printf("\b");

    return 0;
}
posted @ 2024-04-14 15:09  沙滩炒花蛤  阅读(62)  评论(0编辑  收藏  举报