1-20 detab.c

記号パラメータとはなんぞや? たぶん#defineで作る定数のことだろうけど。
お前、1.1.4では記号定数て言ってるじゃねーかよー >K&R
1章の問題でprintfの書式の*使うかどうか迷ったけど、結局使いました。
書くまでも無い簡単なループで置き換えられるからいいかなと。

/*
 * P42 演習1-20
 *   入力されたタブを、次のタブ・ストップまでのスペースを
 *   うめる適当な数のブランク(空白)で置き換えるプログラム
 *   detabを書け。タブ・ストップの位置は、例えばn文字という
 *   ように固定して考えよ。nは変数にすべきか、記号パラメータ
 *   にすべきか?
 *
 *
 *         2007/06/11 arikui
 *
 */


#include <stdio.h>


int main(void){
    int n = 4;  /* tab stop */
    int c, tab, col = 0;
    
    while((c = getchar()) != EOF){
        if (c == '\t'){
            tab = n - col % n;
            col += tab;
            printf("%*s", tab, "");
        }else{
            ++col;
            if (c == '\n') col = 0;
            putchar(c);
        }
    }
    
    return 0;
}