C言語で行末の空白を赤の下線で強調表示する

C言語でターミナルで表示される文字をカラー表示させる でのエスケープシーケンスによるカラー表示を使って行末の空白文字列を明示させてみる。

空白文字が見つかったら空白以外の文字が見つかるまでスキップして、見つかった空白以外の文字が '\n' ならば下線付きでカラー表示させてスキップ回数分の空白を出力する。
見つかった空白以外の文字は ungetc を使って標準入力に戻す。

#include <stdio.h>

#define CHAR_SPACE ' '

#define COLOR_RED     "\x1b[31m" /* 前景色 赤 */
#define COLOR_DEFAULT "\x1b[39m" /* 前景色 デフォルト */
#define DEC_UNDERLINE "\x1b[4m"  /* 装飾   下線 */
#define DEC_DEFAULT   "\x1b[0m"  /* 装飾   デフォルト */

int main(void)
{
    int c, count;

    while ((c = getchar()) != EOF) {
        if (c == CHAR_SPACE) {
            count = 1;
            while ((c = getchar()) == CHAR_SPACE) {
                count++;
            }
            if (c == '\n') {
                printf(COLOR_RED);
                printf(DEC_UNDERLINE);
            }
            while (count-- > 0) {
                putchar(CHAR_SPACE);
            }
            if (c == '\n') {
                printf(COLOR_DEFAULT);
                printf(DEC_DEFAULT);
            }
            ungetc(c, stdin);
        } else {
            putchar(c);
        }
    }

    return 0;
}

iTerm で行末の空白文字列を強調表示した Screenshot

«
»