開発環境
- OS X Lion - Apple(OS)
- Emacs、BBEdit - Bare Bones Software, Inc. (Text Editor)
- プログラミング言語: C
- Clang (コンパイラ)
プログラミング言語C 第2版 ANSI規格準拠 (B.W. カーニハン D.M. リッチー (著)、 石田 晴久 (翻訳)、共立出版)の第1章(やさしい入門)、1.10(外部変数と通用範囲)の演習1-24を解いてみる。
その他参考書籍
- プログラミング言語Cアンサー・ブック 第2版 (クロビス・L.トンド、スコット・E.ギンペル(著)、矢吹 道郎(翻訳))
演習 1-24.
コード
sample.c
#include <stdio.h> void in_comment(void); void quote(int); void check(int); int parenthesis, brace, bracket; int main() { int c; while ((c = getchar()) != EOF) { if (c == '/') { if ((c = getchar()) == '*') { in_comment(); } else { check(c); } } else if (c == '\'' || c == '"') { quote(c); } else { check(c); } } if (parenthesis > 0) { printf("閉じられていない丸括弧がある\n"); parenthesis = 0; } if (brace > 0) { printf("閉じられていない波括弧がある\n"); brace = 0; } if (bracket > 0) { printf("閉じられていない角括弧がある\n"); bracket = 0; } if (parenthesis < 0) { printf("丸括弧の釣り合いがとれていない\n"); } if (brace < 0) { printf("波括弧の釣り合いがとれていない\n"); } if (bracket < 0) { printf("角括弧の釣り合いがとれていない\n"); } return 0; } void in_comment(void) { int c, d; c = getchar(); d = getchar(); while (c != '*' || d != '/') { c = d; d = getchar(); } } void quote(int c) { int d; while ((d = getchar()) != c) { if (d == '\\') { getchar(); } } } void check(int c) { switch (c) { case '(': parenthesis++; break; case ')': parenthesis--; break; case '{': brace++; break; case '}': brace--; break; case '[': bracket++; break; case ']': bracket--; break; default: break; } }
入出力結果(Terminal)
$ cat test.c #include <stdio.h> void in_comment(void); void quote(int); void check(int); int parenthesis, brace, bracket; /* (}[ */ int main() { int c; printf("(}["); while ((c = getchar()) != EOF) { if (c == '/') { if ((c = getchar()) == '*') { in_comment(); } else { check(c); } } else if (c == '\'' || c == '"') { quote(c); } else { check(c); } } if (parenthesis > 0) { printf("閉じられていない丸括弧がある\n"); parenthesis = 0; } if (brace > 0) { printf("閉じられていない波括弧がある\n"); brace = 0; } if (bracket > 0) { printf("閉じられていない角括弧がある\n"); bracket = 0; } if (parenthesis < 0) { printf("丸括弧の釣り合いがとれていない\n"); } if (brace < 0) { printf("波括弧の釣り合いがとれていない\n"); } if (bracket < 0) { printf("角括弧の釣り合いがとれていない\n"); } return 0; } void in_comment(void) { int c, d; c = getchar(); d = getchar(); while (c != '*' || d != '/') { c = d; d = getchar(); } } void quote(int c) { int d; while ((d = getchar()) != c) { if (d == '\\') { getchar(); } } } void check(int c) { switch (c) { case '(': parenthesis++; break; case ')': parenthesis--; break; case '{': brace++; break; case '}': brace--; break; case '[': bracket++; break; case ']': bracket--; break; default: break; } $ ./a.out < test.c 閉じられていない波括弧がある $
0 コメント:
コメントを投稿