ページ 11

c言語初心者のくだらない質問

Posted: 2013年3月11日(月) 17:38
by まるくま
読み込まれた整数値以下である正の偶数を昇順に表示するプログラムを作成せよ。で

#include <stdio.h>

int main(void)
{
int i, no;

printf("正の整数を入力してください:");
scanf("%d", &no);

i = 2;
while(i <= no){
printf("%d ", i);
i+=2;}


putchar('\n');

return (0);
}

というのはわかっているのですが、
while(i <= no){
printf("%d ", i);
i+=2;}
の部分を簡略化したかったので
while(i <= no)
printf("%d ", i+=2);
としたのですが、結果が19を入力したときに20まで表示されてしまします。
なぜでしょうか?初心者です。

Re: c言語初心者のくだらない質問

Posted: 2013年3月11日(月) 17:42
by まるくま
C++ではなくCです。

Re: c言語初心者のくだらない質問

Posted: 2013年3月11日(月) 17:43
by みけCAT
コードはcodeタグで囲んでいただけるとありがたいです。

i+=2はiに2を足した後の値が返るので、
i==18のときにi<=noを通過し、printf("%d ",i+=2);で18+2である20が出力されます。

コード:

while((i+=2) <= no)
printf("%d ", i);
とすれば大丈夫だと思います。
さらに、最初のi = 2;の代わりにi = 0;とすればなおよいですね。

Re: c言語初心者のくだらない質問

Posted: 2013年3月11日(月) 17:48
by まるくま
なるほど・・・ご回答ありがとうございます!
つまりprintf("%d\n",i+=2);はiに2を足した値が出力されるということでしょうか?

Re: c言語初心者のくだらない質問

Posted: 2013年3月11日(月) 18:03
by みけCAT
iに2を足し、その値を出力するということです。

Re: c言語初心者のくだらない質問

Posted: 2013年3月11日(月) 18:04
by まるくま
ありがとうございます。今後ともよろしくお願いします(`・ω・´)