はじめての C

対話型入力 3

ここで、わずかですが scanf の たぐいを 回避できる 選択肢が あります。 その中には かなり 複雑な ものもあり、使う前には、ユーザ入力が 正確であることを 十分 確かめないと いけません。 でないと、あなたにとって なにか よくないことが、すぐに 起きることに なります。

はじめの オプションは fgets と sscanf です。

int var;
char buf[20];
while (fgets(buf, 20, stdin) != NULL) {
if (sscanf(buf, "%d", &var) == 1)
break;
fputs("Error, invalid input, try again", stderr);
}

このオプションは 安全です。 ユーザからの入力を ストリングとして 読み込み、必要とする値が 取り込まれると 停止 - break - します。

この実装は 単純ですが、sscanf が 使われる それ以前に、そのストリング すべてが 正確であることを 確認できるのです。

留意することは、scanf は 安全では ありませんが、その scanf の 仲間を 含む 他の関数群は、多くの parsing situation において、とても 役にたつ、という点です。

つぎは、1つの数のように、単一の値を 入力するときの オプションです。