なぜ論理和でなく論理積で正しく動くのか?
Q&A
Closed
解決したいこと
visual stdio2022でじゃんけんゲームを作っていて正しい動き自体はするのですが、whileの条件式でなぜ論理和でなく論理積で動くのか気になったので知っている方教えてください。
c言語を使っています。
プログラミングを始めて1か月ほどなので初心者でも分かりやすい説明だと助かります。
該当するソースコード
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void) {
int n;
int b;
b = 0;
int c;
c = 0;
int a;
a = 1;
//5回戦の処理
while( (b <= 2)&& (c <= 2))
{
//じゃんけんの入力
printf("%d回戦目となります。\n", a);
printf("勝ち%d\n",b);
printf("負け%d\n", c);
printf("1.グー2.チョキ3.パーのどれかを入力してください。数字以外または1,2,3の数字、マイナスの数字を入力すると強制終了されます。\n");
printf("あいこはカウントされません。\n");
scanf("%d", &n);
if (n == 1) {
printf("あなたはグーを出しました\n");
}
if (n == 2) {
printf("あなたはチョキを出しました\n");
}
if (n == 3) {
printf("あなたはパーを出しました\n");
}
//1.2,3、以外の数字とマイナスの数字で強制終了
if (n == 0 || n <= -1||n>=4) {
break;
}
//コンピューター側のじゃんけん
int m;
srand(time(NULL));
int rn = rand();
m = rn % 3 + 1;
printf("出てきた乱数データは%d\n", rn);
printf("コンピューターが入力したのは?%d\n", m);
if (m == 1) {
printf("コンピューターはグーを出しました\n");
}
if (m == 2) {
printf("コンピューターはチョキを出しました\n");
}
if (m == 3) {
printf("コンピューターはパーを出しました\n");
}
//プレイヤーとコンピューターの比較
if (n == m) {
printf("結果はあいこでした\n");
a = a - 1;
}
if (n == 1 && m == 2 || n == 2 && m == 3 || n == 3 && m == 1) {
printf("結果は勝ちでした\n");
b = b + 1;
}
if (n == 1 && m == 3 || n == 2 && m == 1 || n == 3 && m == 2) {
printf("結果は負けでした\n");
c = c + 1;
}
a = a + 1;
}
if (b == 3) {
printf("あなたの勝ちです\n");
}
if (c == 3) {
printf("コンピューターの勝ちです\n");
}
printf("じゃんけんを終了しました");
getchar();
return 0;
}
//疑問のコード while( (b <= 2)&& (c <= 2))