printf ,scanf 的應用和區別
函式printf從左往右讀取,然後將先讀取放到棧底,最後讀取的放在棧頂,處理時候是從棧頂開始的,所有我們看見的結果是,從右邊開始處理的。
(PS:這段話有書上不贊同,但一般可以這麼用著)
例:
vc
1.
#include<stdio.h>
#include "stdafx.h“
void main()
{
int a=3;
printf("%d,%d/n",a,(a-=a*a));
}
2.
#include<stdio.h>
#include "stdafx.h“
void main()
{
int a=3;
printf("%d,%d/n",(a-=a*a),a);
}
1的輸出-6,-6
2的輸出3,-6
--------------------------------------------------------------------------------------------------------------
再舉個例子:
main(){
int i=8;
printf("%d %d %d %d %d %d ",++i,--i,i++,i--,-i++,-i--);
}
執行結果
8
7
7
8
-7
-8
例2
main(){
int i=8;
printf("%d ",++i);
printf("%d ",--i);
printf("%d ",i++);
printf("%d ",i--);
printf("%d ",-i++);
printf("%d ",-i--);
}
執行結果:
9
8
8
9
-8
-9
這兩個程式的區別是用一個printf語句和多個printf 語句輸出。但從結果可以看出是不同的。為什麼結果會不同呢?就是因為printf函式對輸出表中各量求值的順序是自右至左進行的。在第一例中,先對最後一項“-i--”求值,結果為-8,然後i自減1後為7。 再對“-i++”項求值得-7,然後i自增1後為8。再對“i--”項求值得8,然後i再自減1後為7。再求“i++”項得7,然後i再自增1後為8。 再求“--i”項,i先自減1後輸出,輸出值為7。 最後才求輸出表列中的第一項“++i”,此時i自增1後輸出8。
但是必須注意,求值順序雖是自右至左,但是輸出順序還是從左至右,因此得到的結果是上述輸出結果。