これは、C のあまり知られていない演算子の 1 つである "," またはシーケンス演算子を使用するのに最適な場所です。これを利用するために書き直したコードは次のとおりです。
#include <stdio.h>
int main()
{
char *str[] = { "123", "456", "789", "0" };
int i = 0;
int n0;
int scanret;
while((scanret = sscanf(str[i], "%d", &n0)), n0 != 0)
{
printf("i = %d n0 = %d scanret = %d\n", i, n0, scanret);
i += 1;
}
printf("i = %d n0 = %d scanret = %d after loop termination\n", i, n0, scanret);
}
while
ループの条件を見てください。ここで何が起こるかというと、最初に sscanf が評価され、次にテストn0 != 0
が評価されます。これは 'and' または 'or' 演算子ではないことに注意してください (以下のサンプル出力を調べることで判断できます) - sscanf が実行され、 の結果がループn0 != 0
のテストとして使用されます。条件の値としてその条件で評価された最後の式。while
while
これを実行すると、次のような出力が得られます。
i = 0 n0 = 123 scanret = 1
i = 1 n0 = 456 scanret = 1
i = 2 n0 = 789 scanret = 1
i = 3 n0 = 0 scanret = 1 after loop termination
共有してお楽しみください。