C言語なら俺に聞け(入門篇) Part 19
レス数が950を超えています。1000を超えると書き込みができなくなります。
0976デフォルトの名無しさん
2007/10/15(月) 16:05:20>if(m%3 == 0)
> {total = total + m;
> {while(m<=n)
> m = m + 3;}
> printf("%d",total);}
↑ここは入力ミス(ブロックのくくりミス)だと思うからとりあえず置いといて
>else if(m%3 == 2)
> {while(m<=n)
> {total = total + X;
> X = m + 1;
> m = m + 3;}
> printf("%d",total);}
ちゃんと脳内トレースすれば分かると思うけど、
ループ条件のチェックが"足す前"に行われている。
Xにm+1が代入されて、それが足される前にm+=3して条件チェックしちゃってるから、
m+1 <= n < m+3
になってると、while条件でXが足される前にループ抜けちゃう。
さらにいえば、ここでの条件チェックはm+1<=nとかX<=nとかすべき
(mがn以下であるからといってm+1がn以下とは限らない)
一例としては、
else if(m%3 == 2){
while(m+1 <= n){
total += m + 1;
m += 3;
}
printf("%d",total);
}
まあ、for使った方が分かりやすいかもね。
レス数が950を超えています。1000を超えると書き込みができなくなります。