whileループ
入力した数値の合計
code:sum.c
int main(void)
{
double s, x;
s = 0;
while (scanf("%lf", &x) == 1) {
s += x;
}
printf("合計 %g\n", s);
return 0;
}
scanf()(スキャンエフ,書式指定入力)は,指定した入力の成功数を返す。この場合 "%lf" の指定通りの入力(数値と解釈できる文字列の入力)があれば 1 を返す。数値と解釈できなければ(例えば abc と入力すれば)0 を返す。入力がまったく得られなければ(キーボード入力なら「入力終了」を表す Ctrl+D を入力すれば)-1 を返す。したがって,入力が成功したかどうかは,scanf("%lf", &x) == 1 で判断できる。
入力が成功している間ずっと繰り返すには,このプログラムのように,while を使って繰り返し処理を行なう。 このようなプログラムでは,入力はキーボードではなくファイルに書いておくことが多い。例えば
code:input.txt
3.14 2.718
10 -5
というファイルを用意する。scanf() は一連の空白や改行を数値の区切りと見なす。これを上のプログラムで読み込むには
./a.out < input.txt
のように < の後にファイル名を書く。すると,input.txt というファイルが標準入力にリダイレクト(redirect)されて,あたかも input.txt の中身をキーボードから打ち込んだのと同じように処理する。 ちなみに,画面出力(標準出力)もファイルにリダイレクトできる: ./a.out < input.txt > output.txt