printf輸出順序問題與i++、++i
printf()
今天遇到類似這樣一道編程題:
#include<stdio.h>
int main()
{
int i = 0;
printf("++i,++i,++i,++i,++i,++i = ");
printf("%d %d %d %d %d %d\n",++i,++i,++i,++i,++i,++i);
i=0;
printf("i++,i++,i++,i++,i++,i++ = ");
printf("%d %d %d %d %d %d\n",i++,i++,i++,i++,i++,i++);
i=0;
printf("i++,i++,i++,++i,++i,++i = ");
printf("%d %d %d %d %d %d \n",i++,i++,i++,++i,++i,++i);
i=0;
printf("++i,++i,++i,i++,i++,i++ = ");
printf("%d %d %d %d %d %d\n",++i,++i,++i,i++,i++,i++);
i=0;
printf("++i,++i,i,i,i++,i++ = ");
printf("%d %d %d %d %d %d\n",++i,++i,i,i,i++,i++);
}
輸出結果:
編程環境是:VS2010、win10
總結一下:
printf()從右往左輸出;
如果輸出爲 i++,則輸出當前 i 後立馬賦值 i = i + 1;否則輸出位置爲 ++i 或者 i 時,先進行完所有運算再輸出 i 的最終值。
" = "與i++、++i
#include<stdio.h>
int main()
{
int i;
int num;
i=0;
num=(i++)+(i++)+(i++)+(i++)+(i++);
printf("num = (i++)+(i++)+(i++)+(i++)+(i++) = %d\n",num);//0+0+0+0
i=0;
num = (++i)+(++i)+(++i)+(++i)+(++i);
printf("num = (++i)+(++i)+(++i)+(++i)+(++i) = %d\n",num); //5+5+5+5+5
i=0;
num = (++i)+(++i)+(i++)+(i++)+(i++);
printf("num = (++i)+(++i)+(i++)+(i++)+(i++) = %d\n",num); // 5+5+0+0+0
i=0;
num = (++i)+(++i)+(++i)+(i)+(i++);
printf("num = (++i)+(++i)+(++i)+(i)+(i++) = %d\n",num); //5+5+5+0+0
}
對於等式來說,是先對 i 和 i++ 中的 i 賦值,再最後對 ++i 中的 i 賦值,然後運算。