見出し画像

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」関数と分離する


いいなと思ったら応援しよう!