次のコードは、ユーザーが入力した数値が素数かどうかを示す出力を示しています。
#include <stdio.h>
#include <stdlib.h>
int a,b;
int main(void) {
printf("Enter number: ");
fflush(stdout);
scanf("%d",&a);
for (b = 2; b < a; b++)
{
if (a % b == 0)
break;
}
if (b<a)
{
printf ("%d is divisible by %d\n", a, b);
}
else
{
printf ("%d is prime \n", a);
}
return 0;
}
上記のコードは私のものではなく、毎回素数を正しく識別します (つまり、 else句のprintfステートメントが出力されます)。
ifステートメントについての私の理解では、if-elseステートメントのelse句は、 else句がまだない最も近いifステートメントに属します。そうは言っても、上記のコードのelse節は最も近いifステートメントに属していると思います。
私の質問は次のとおりです。ユーザーが 31 や 37 などの素数を入力した場合、 else句のprintfステートメントはどのように出力されるのでしょうか? (2 番目のifステートメントの) 条件は、b が だけインクリメントされることを考慮すると、常に true になります。したがって、ユーザーが数値 31 を入力すると、変数bは 30 にインクリメントされるだけです。ユーザーが入力した数値が素数であるかどうかに関係なく、2 番目のifステートメントのprintfステートメントが出力されることはありません。条件が常に真になることを考えると、そうではないでしょうか?if (b<a)
(a-1)
if (b<a)
上記のコードはどのようにしてすべての素数を正しく出力し、それで問題なく動作するのでしょうか? ( if文の仕組みについての私の限られた理解によれば、そうすべきではありません)