演習1-24 K&R プログラミング言語C

演習1-24

開始 [ が見つかればカウンタを増加させ、閉じ ] が見つかればカウンタを減少させている。
最終的にカウンタが 0 であればエラーではないという、手抜き版。

#include <stdio.h>

#define TRUE    1
#define FALSE   0

int main(int argc, char *argv[])
{
    int c, d, cb_count, is_comment, is_squote, is_dquote;

    cb_count = 0;
    is_comment = is_squote = is_dquote = FALSE;
    c = getchar();

    while (c != EOF) {
        d = getchar();

        if (!is_dquote && !is_squote && !is_comment && c == '/' && d == '*') {
            is_comment = TRUE;
        } else if (!is_dquote && !is_squote && is_comment && c == '*' && d == '/') {
            d = getchar();
            is_comment = FALSE;
        } else if (!is_comment && !is_squote && !is_dquote && c == '"') {
            is_dquote = TRUE;
        } else if (!is_comment && !is_squote && is_dquote && c == '"') {
            is_dquote = FALSE;
        } else if (!is_comment && !is_dquote && !is_squote && c == '\'') {
            is_squote = TRUE;
        } else if (!is_comment && !is_dquote && is_squote && c == '\'') {
            is_squote = FALSE;
        }

        if (!is_comment && !is_squote && !is_dquote && c == '{') {
            cb_count++;
        } else if (!is_comment && !is_squote && !is_dquote && c == '}') {
            cb_count--;
        }

        c = d;
    }

    if (cb_count != 0) {
        fprintf(stderr, "ERROR COUNT %d\n", cb_count);
    }

    return 0;
}
プログラミング言語C 第2版 ANSI規格準拠
B.W. カーニハン D.M. リッチー
共立出版
売り上げランキング: 9726
«
»