2013年8月29日木曜日

開発環境

プログラミング言語C 第2版 ANSI規格準拠 (B.W. カーニハン D.M. リッチー (著)、 石田 晴久 (翻訳)、共立出版)の第7章(入出力)、7.2(書式付き出力 - Printf)、演習7-2を解いてみる。

その他参考書籍

演習 7-2.

コード

sample.c

#include <stdio.h>
#include <ctype.h>

#define MAXLINE 50

int main(int argc, char *argv[])
{
    int c;
    int i;
    int col;
    int inc(int, int);
    
    col = 1;
    for (i = 0; i < MAXLINE; i++) {
        if (col == 10) {
            col = 0;
        }
        printf("%d", col);
        col++;
    }
    putchar('\n');
    i = 0;
    while ((c = getchar()) != EOF) {
        if (iscntrl(c) || c == ' ') {
            i = inc(i, 6);
            printf(" \\x%02x ", c);
            if (c == '\n') {
                i = 0;
                putchar('\n');
            }
        } else {
            i = inc(i, 1);
            putchar(c);
        }
    }
    return 0;
}

int inc(int i, int n)
{
    if (i + n <= MAXLINE) {
        return i + n;
    }
    putchar('\n');
    return n;
}

入出力結果(Terminal)

$ ./a.out < sample.c
12345678901234567890123456789012345678901234567890
#include \x20 <stdio.h> \x0a 
#include \x20 <ctype.h> \x0a 
 \x0a 
#define \x20 MAXLINE \x20 50 \x0a 
 \x0a 
int \x20 main(int \x20 argc, \x20 char \x20 *argv[
]) \x0a 
{ \x0a 
 \x20  \x20  \x20  \x20 int \x20 c; \x0a 
 \x20  \x20  \x20  \x20 int \x20 i; \x0a 
 \x20  \x20  \x20  \x20 int \x20 col; \x0a 
 \x20  \x20  \x20  \x20 int \x20 inc(int, \x20 int
); \x0a 
 \x20  \x20  \x20  \x20  \x0a 
 \x20  \x20  \x20  \x20 col \x20 = \x20 1; \x0a 
 \x20  \x20  \x20  \x20 for \x20 (i \x20 = \x20 0;
 \x20 i \x20 < \x20 MAXLINE; \x20 i++) \x20 {
 \x0a 
 \x20  \x20  \x20  \x20  \x20  \x20  \x20  \x20 if
 \x20 (col \x20 == \x20 10) \x20 { \x0a 
 \x20  \x20  \x20  \x20  \x20  \x20  \x20  \x20 
 \x20  \x20  \x20  \x20 col \x20 = \x20 0; \x0a 
 \x20  \x20  \x20  \x20  \x20  \x20  \x20  \x20 }
 \x0a 
 \x20  \x20  \x20  \x20  \x20  \x20  \x20  \x20 pr
intf("%d", \x20 col); \x0a 
 \x20  \x20  \x20  \x20  \x20  \x20  \x20  \x20 co
l++; \x0a 
 \x20  \x20  \x20  \x20 } \x0a 
 \x20  \x20  \x20  \x20 putchar('\n'); \x0a 
 \x20  \x20  \x20  \x20 i \x20 = \x20 0; \x0a 
 \x20  \x20  \x20  \x20 while \x20 ((c \x20 =
 \x20 getchar()) \x20 != \x20 EOF) \x20 { \x0a 
 \x20  \x20  \x20  \x20  \x20  \x20  \x20  \x20 if
 \x20 (iscntrl(c) \x20 || \x20 c \x20 == \x20 '
 \x20 ') \x20 { \x0a 
 \x20  \x20  \x20  \x20  \x20  \x20  \x20  \x20 
 \x20  \x20  \x20  \x20 i \x20 = \x20 inc(i, \x20 
6); \x0a 
 \x20  \x20  \x20  \x20  \x20  \x20  \x20  \x20 
 \x20  \x20  \x20  \x20 printf(" \x20 \\x%02x
 \x20 ", \x20 c); \x0a 
 \x20  \x20  \x20  \x20  \x20  \x20  \x20  \x20 
 \x20  \x20  \x20  \x20 if \x20 (c \x20 == \x20 '\
n') \x20 { \x0a 
 \x20  \x20  \x20  \x20  \x20  \x20  \x20  \x20 
 \x20  \x20  \x20  \x20  \x20  \x20  \x20  \x20 i
 \x20 = \x20 0; \x0a 
 \x20  \x20  \x20  \x20  \x20  \x20  \x20  \x20 
 \x20  \x20  \x20  \x20  \x20  \x20  \x20  \x20 pu
tchar('\n'); \x0a 
 \x20  \x20  \x20  \x20  \x20  \x20  \x20  \x20 
 \x20  \x20  \x20  \x20 } \x0a 
 \x20  \x20  \x20  \x20  \x20  \x20  \x20  \x20 }
 \x20 else \x20 { \x0a 
 \x20  \x20  \x20  \x20  \x20  \x20  \x20  \x20 
 \x20  \x20  \x20  \x20 i \x20 = \x20 inc(i, \x20 
1); \x0a 
 \x20  \x20  \x20  \x20  \x20  \x20  \x20  \x20 
 \x20  \x20  \x20  \x20 putchar(c); \x0a 
 \x20  \x20  \x20  \x20  \x20  \x20  \x20  \x20 }
 \x0a 
 \x20  \x20  \x20  \x20 } \x0a 
 \x20  \x20  \x20  \x20 return \x20 0; \x0a 
} \x0a 
 \x0a 
int \x20 inc(int \x20 i, \x20 int \x20 n) \x0a 
{ \x0a 
 \x20  \x20  \x20  \x20 if \x20 (i \x20 + \x20 n
 \x20 <= \x20 MAXLINE) \x20 { \x0a 
 \x20  \x20  \x20  \x20  \x20  \x20  \x20  \x20 re
turn \x20 i \x20 + \x20 n; \x0a 
 \x20  \x20  \x20  \x20 } \x0a 
 \x20  \x20  \x20  \x20 putchar('\n'); \x0a 
 \x20  \x20  \x20  \x20 return \x20 n; \x0a 
} \x0a 
$

0 コメント:

コメントを投稿