何かの値が入力されるまで入力を受け付けるという形式は、プログラミングの問題で多くみられます。
その後、合計・平均・最大値等の集計処理へ繋がることも多いです。
複数回入力を実現するためには、while文の条件式を利用します。
下記は「『0』が入力されるまでの入力値(整数)の合計を求める」プログラムです。
複数回入力1(C)
#include <stdio.h>
int main(void){
int num, sum = 0;
printf("整数(終了時は0)を入力:");
scanf("%d", &num);
while(num != 0){
sum = sum + num;
scanf("%d", &num);
}
printf("入力値の合計:%d\n", sum);
return 0;
}
複数回入力1(Java)
import java.util.Scanner;
public class InputNums{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int num, sum = 0;
System.out.print("整数(終了時は0)を入力:");
num = sc.nextInt();
while(num != 0){
sum = sum + num;
num = sc.nextInt();
}
System.out.println("入力値の合計:" + sum);
}
}
実行結果(例)
整数(終了時は0)を入力:5
-2
7
0
入力値の合計:10
複数回入力1の場合でも良いのですが、while文では見ての通り、標準入力の文が2回必要になります。
プログラムを短くするためには、後で条件判定を行う「do-while文」を使うという方法があります。
下記は、「複数回入力1」の入力処理部分6行(7~12行目)をdo-while文で書き換えたものです。実行結果は「複数回入力1」と同じになります。
複数回入力2(C)
printf("整数(終了時は0)を入力:");
do{
scanf("%d", &num);
sum = sum + num;
} while(num != 0);
複数回入力2(Java)
System.out.print("整数(終了時は0)を入力:");
do{
num = sc.nextInt();
sum = sum + num;
} while(num != 0);
ただ、do-while文は常に使えるわけではありません。
do-while文は後で条件判定を行うため、入力を終わらせるために入力した値(今回は0)も処理されてしまうからです。
今回は、0が入力されるまでの入力値を合計する処理であるため、最後に0が足されても何の支障もありませんが、問題によっては間違った処理になってしまう場合もあるので、注意が必要です。
例えば、「-1が入力されるまでの合計を求める」プログラムの場合、出力される合計は実際の合計 - 1になってしまいます。
なお、無限ループの中でbreak文を使うという方法でも、標準入力の文が1つで済みます。
break文には、終了条件が分かりやすいというメリットもあります。
下記は、「複数回入力1」の入力処理部分6行(7~12行目)をbreak文を使った場合で書き換えたものです。実行結果は「複数回入力1・2」と同じになります。
複数回入力3(C)
printf("整数(終了時は0)を入力:");
while(1){
scanf("%d", &num);
if(num == 0){
break;
}
sum = sum + num;
}
複数回入力3(Java)
System.out.print("整数(終了時は0)を入力:");
while(true){
num = sc.nextInt();
if(num == 0){
break;
}
sum = sum + num;
}
break文直後にループから抜けるので、足し合わせていく処理は行われません。
終了時の「0が入力された時」という条件も分かりやすいですね。
あなたもジンドゥーで無料ホームページを。 無料新規登録は https://jp.jimdo.com から