C言語 足し算プログラム改善
前回プログラムでは、足し算が一回しかできませんでした。
なので、繰り返し足し算できるように改良してみました。
それがこちら。
#include <stdio.h>
int main()
{
for (;;)
{
int a;
int b;
int x;
printf("number1? --->");
scanf("%d", &a);
printf("number2? --->");
scanf("%d", &b);
x = a + b;
printf("%d + %d = %d\n", a, b, x);
}
return 0;
}
無限ループにしてみただけ。
コンパイルして。
$ cc xiol.c
$ l
a.out* x.c xio.c xiol.c xo.c
$
実行。
$ ./a.out
number1? --->1
number2? --->2
1 + 2 = 3
number1? --->8
number2? --->9
8 + 9 = 17
number1? --->444
number2? --->777
444 + 777 = 1221
number1? --->^C
$
おお。
繰り返している。
終了は、ctrl+c で。
「ctrl+c」で終了というのはイマイチか。
ちゃんと終わらせよう。
「scanf」は、取得できたデータの数を戻り値で返します。
「scanf("%d", &a);」の場合、10進数のデータを一つ取得することを期待していますので、通常は戻り値が1になるはずです。
戻り値が1以外であればプログラムを終了するようにします。10進数に変換できない文字を入力すれば、すなわち「0~9」以外の文字を入力すればプログラムが終了することになります。
では試してみます。
こちらがプログラム。
#include <stdio.h>
int main()
{
for (;;)
{
int a;
int b;
int x;
int n;
printf("number1? --->");
n = scanf("%d", &a);
if (n != 1)
{
break;
}
printf("number2? --->");
n = scanf("%d", &b);
if (n != 1)
{
break;
}
x = a + b;
printf("%d + %d = %d\n", a, b, x);
}
return 0;
}
コンパイルして。
$ cc xiole.c
$ l
a.out* x.c xio.c xiol.c xiole.c xo.c
$
実行します。
$ ./a.out
number1? --->1
number2? --->2
1 + 2 = 3
number1? --->7654
number2? --->3210
7654 + 3210 = 10864
number1? --->q
$
最後は「q」を入力してみました。
「q」は10進数には変換できません。
ですから、「scanf」の戻り値が1にはなりません。
無事にプログラムは終了しました。
「main」に何もかも突っ込んでいるのもあまり綺麗とは言えないですね。
次回はプログラムの構成を改善してみます。
次の記事→ C言語 「main」関数と分離する