scanf()とか
本編に書いた→ 教養としてのC言語プログラミング入門は成立するのか - 檜山正幸のキマイラ飼育記
僕は最初から「scanfは使うべきではない」と教わったので、scanfの存在は知っているが使ったことはない。正体がハッキリした文字列にsscanf()を使うことはあるけど。
だけど、教育現場ではscanf()を使っている(使わせている)みたい。色々な事情からしょうがないのかなぁ、、、、、
人生も終わりに近づいてscanf()を使う(使わせる)はめになるとは思わなんだ。
これは厄介者だ。
#include <stdio.h> int main() { int n1, n2; while (1) { printf("> "); scanf("%d%d", &n1, &n2); printf("n1 = %d, n2 = %d\n", n1, n2); } return 0; }
チェックとフラッシュすれば、まーナントカ使えなくもない。
#include <stdio.h> int main() { int n1, n2; int k; while (1) { printf("> "); k = scanf("%d%d", &n1, &n2); if (k == 2) { printf("n1 = %d, n2 = %d\n", n1, n2); } else { fflush(stdin); // 残った入力データを捨てる } } return 0; }
ある程度は信頼できる入力から、整数値の列を入力するなら、
#include <stdio.h> int main() { int n; int k; do { k = scanf("%d", &n); if (k == 1) { printf("%d\n", n); } else { printf("BAD INPUT\n", n); fflush(stdin); } } while (k == 1); return 0; }
コマンドライン引数
#include <stdio.h> int main(int argc, char **argv) { int n = 0; if (argc > 1) { n = atoi(argv[1]); } printf("%d\n", n); return 0; }