演習7-4 K&R プログラミング言語C
2010年03月09日
演習7-4
minscanf
の可変引数はポインタでなければならないので ival
, fval
はそれぞれ int
, float
へのポインタ変数とする。
#include <stdio.h> #include <stdarg.h> void minscanf(char *fmt, ...); int main(void) { int day, year; char monthname[20]; minscanf("%d %s %d", &day, monthname, &year); printf("day => %d, monthname => %s, year => %d\n", day, monthname, year); return 0; } /* minscanf : 可変な引数リストをもつ最小の scanf */ void minscanf(char *fmt, ...) { va_list ap; /* 各名なし引数を順々に指す */ char *p, *sval; int *ival; float *fval; va_start(ap, fmt); /* ap を最初の名なし引数を指すようにする */ for (p = fmt; *p; p++) { if (*p != '%') { continue; } switch (*++p) { case 'd': ival = va_arg(ap, int *); scanf("%d", ival); break; case 'f': fval = va_arg(ap, float *); scanf("%f", fval); break; case 's': sval = va_arg(ap, char *); scanf("%s", sval); break; default: break; } } }
実行結果
$ ./minscanf 25 Dec 2010 day => 25, monthname => Dec, year => 2010
プログラミング言語C 第2版 ANSI規格準拠
posted with amazlet at 09.11.27
B.W. カーニハン D.M. リッチー
共立出版
売り上げランキング: 9726
共立出版
売り上げランキング: 9726