独習Cの例_3_9_1の正答の14行目の理解について
Posted: 2012年12月22日(土) 14:54
[1] 質問文
[1.1]
<独習C例3_9_1の問題>
(A)加算、(S)減算、(M)乗算、(D)除算を行う。その際、'A''S''M'''D'以外が入力されてもループを続け、計算はswitch文を使うプログラム。
<疑問点>
独習Cの例_3_9_1の正答の14行目はどのように理解したら良いでしょうか?do-whileの式で'A''S''M'''D'以外を入力しても、ループが続くため、必要ないように感じるのですが……。14行目のコードの意味を教えて下さい。また、間違っている部分、手直しした方が良い部分があれば、合わせてご教授お願い致します。
[1.2]
[2] 環境
[2.1] OS : Windows
[2.2] コンパイラ名 : VC++ 2010
[3] その他
・独習Cを読み進めながら、学習している初心者です。
[1.1]
<独習C例3_9_1の問題>
(A)加算、(S)減算、(M)乗算、(D)除算を行う。その際、'A''S''M'''D'以外が入力されてもループを続け、計算はswitch文を使うプログラム。
<疑問点>
独習Cの例_3_9_1の正答の14行目はどのように理解したら良いでしょうか?do-whileの式で'A''S''M'''D'以外を入力しても、ループが続くため、必要ないように感じるのですが……。14行目のコードの意味を教えて下さい。また、間違っている部分、手直しした方が良い部分があれば、合わせてご教授お願い致します。
[1.2]
#include <stdio.h>
int main(void)
{
int a, b;
char ch;
printf("実行したい演算は\n");
printf("加算(A)、減算(S)、乗算(M)、除算(D)のどれですか?\n");
do{
printf("アルファベットの1文字を入力してください: ");
ch = getchar();
while(getchar() != '\n');
}while((ch != 'A') && (ch != 'S') && (ch != 'M') && (ch != 'D'));
printf("\n");
printf("最初の数字を入力してください: ");
scanf("%d", &a);
printf("2番目の数字を入力してください: ");
scanf("%d", &b);
switch(ch){
case 'A':
printf("%d", a + b);
break;
case 'S':
printf("%d", a - b);
break;
case 'M':
printf("%d", a * b);
break;
case 'D' :
if(b == 0){
printf("0では割れません。終了します。");
break;
}
printf("%d", a / b);
break;
}
return 0;
}[2] 環境
[2.1] OS : Windows
[2.2] コンパイラ名 : VC++ 2010
[3] その他
・独習Cを読み進めながら、学習している初心者です。