c語言printf函式的問題,C語言關於printf函式的問題 printf(「 d」),後面什麼都沒有,為什麼輸出的是上一個輸出的結果

時間 2022-02-05 05:50:14

1樓:板橋路人

printf("%d,%d,%d,%d\n",a=b=c,a=(b==c),a==(b=c),a==(b==c));

因為你這段中的a=b=c執行完相當與將c的值賦予b,b的值再賦予a,相當於a=3,b=3,c=3。所以後面的結果與前面不同

你沒打錯吧!第一行結果輸出的是「3,1,0,0」啊!

是你題目寫錯吧!

2樓:匿名使用者

= 是賦值 b = c; 就是c的值 賦給a== 是判斷 b==c 如果b和c相等 b==c的值為1 不相等 b==c的值為 0

知道這些的話 自己分析吧

我測試了 是樓主的答案 額 有點蹊蹺 研究下

3樓:匿名使用者

a b c result

a=b=c 1 2 3 3

a=(b==c) 3 3 3 1

a==(b=c) 1 3 3 0

a==(b==c) 1 3 3 1

a=b=c 1 3 3 3

a=(b==c) 3 3 3 1

a==(b=c) 1 3 3 0

a==(b==c) 1 3 3 1

結果應該是3101才合理啊,你確定你code沒有copy錯?

你應該是第二個這裡拼寫錯誤了吧,a=(b==c),我估計你很大可能是a=(b=c)

4樓:

這個問題開始我也覺得很奇怪,現在終於明白了,估計是這樣的

printf是從右到左的輸出順序,並且是最終一次性輸出,即:

printf("%d,%d,%d,%d\n",a=b=c,a=(b==c),a==(b=c),a==(b==c));

先判斷a==(b==c) ,b不等於c a不等於0 所以判斷結果d

再判斷a==(b=c), c賦值於b,即b=3,a不等於3,所以判斷結果e

再判斷a=(b==c), b = 3 = c, 賦值1給a,即a = 1,輸出a

再判斷a=b=c , a=b=c=3, 輸出a;

最後一起輸出此時a = 3, 判斷結果e = 0; 判斷結果d = 0;

所以最終是3 3 0 0

此時a = 3 b =3 c =3

printf("%d",a=b=c); 就輸出3

printf("%d",a=(b==c)); b = c 所以a = 1,輸出1

printf("%d",a==(b=c)); b = c = 3 != a = 1, 輸出0

printf("%d",a==(b==c)); b = c, a = 1, 輸出1;

5樓:匿名使用者

printf("%d,%d,%d,%d\n",a=b=c,a=(b==c),a==(b=c),a==(b==c));

a=b=c可以簡化為a=c,實際上輸出地是c的值,a=(b==c),是先計算b==c的值是0還是1,然後再賦給a,a==(b=c),實際上就是直接判斷a和c的值是否相等 相等輸出1,以下幾個都是類似這樣的判斷

你的輸出結果打錯了 應該是3,1,0,0

3101

c語言關於printf函式的問題 printf(「%d」),後面什麼都沒有,為什麼輸出的是上一個輸出的結果

6樓:聽不清啊

c語言中,如果printf(「%d」),後面什麼都沒有,它輸出的結果是不確定的!

「輸出的是上一個輸出的結果」,這只是一個巧合。並沒有什麼規律性的東西在內的。

7樓:遺失的迷惘

你這個編譯不通過吧,

第一,fun函式裡面的 i 和 t沒有型別說明;

第二,main裡面的for迴圈的小括號是中文格式。

8樓:匿名使用者

輸出的是棧上的值 具體原因不明 不提倡這樣弄 因為棧上的值是不確定的。

c語言:printf()函式的實現原理 50

9樓:潘達

dll種類很多,可以使自定義的,也有是系統dll 比如win32.dll,比如開啟檔案之類的api就在這裡。。。

所有的裝置操作都是windows系統或驅動程式在執行的,你的程式不可能直接執行,當然你要告訴windows你想幹什麼,都需要有個橋樑,dll是動態連結庫,他其實是不能獨自執行的,他沒有自己的執行緒,所以你說是dll完成的其實是不全對的。。。比如windows的api所在的那幾個dll檔案,而且並沒多大,你認為就這幾個檔案就能扛起一整套windows的所有功能嗎???? 根本不是這樣的,這windowsapi的dll庫,只是充當一個傳令兵而已。。。。

比如你要開啟一個檔案,是需要windows確確實實的建立一個檔案物件,這必須要windows核心來完成,createfile這個api只是來獲得一些相關引數,然後通知windows核心去工作,核心相關的程式,根本不在api所在的檔案,windows執行時時要建立很多自己的程序的,任何功能都必須在程序裡完成,單獨一個dll,什麼也做不了,每個驅動程式執行都有自己的程序,和api相關的dll,只是個和外部連結的介面,就相當於電視插銷,遙控器一樣,如果電視只有個殼,看上去是個電視,遙控器按鈕都全乎,但就是不能用,api也是如此。。。。

c語言裡怎麼使用printf?

10樓:匿名使用者

printf()函式的呼叫格式為: printf("《格式化字串》", 《參量表》)。

其中格式化字串包括兩部分內容:一部分是正常字元,這些字元將按原樣輸出; 另一部分是格式化規定字元,以"%"開始,後跟一個或幾個規定字元,用來確定輸出內容格式。

參量表是需要輸出的一系列引數,其個數必須與格式化字串所說明的輸出引數個數一樣多, 各引數之間用","分開, 且順序一一對應,否則將會出現意想不到的錯誤。

比如:int a=1234;

printf("a=%d\n",a);

輸出結果為a=1234。

scanf()是c語言中的一個輸入函式。與printf函式一樣,都被宣告在標頭檔案stdio.h裡,因此在使用scanf函式時要加上#include 。

int scanf(const char * restrict format,...);

函式scanf() 是從標準輸入流stdin  (標準輸入裝置,一般指向鍵盤)中讀內容的通用子程式,可以說明的格式讀入多個字元,並儲存在對應地址的變數中。

如:scanf("%d %d",&a,&b);

函式返回值為int型,如果a和b都被成功讀入,那麼scanf的返回值就是2。

擴充套件資料:

printf函式使用注意事項

1.域寬問題

%d:按整型資料的實際長度輸出。

如果想輸出指定寬度可以指定域寬,%md-->m域寬,列印出來以後,在控制檯上,顯示m位;

如果我們要列印的數的位數如果超過我們設定m則原樣輸出;

如果我們要列印的數的位數如果小於我們設定的位數,則補空白,具體如下:

如果m為正數,則左對齊(左側補空白);

如果m為負數,則右對齊(右側補空白)。

2.轉義字元問題

如果想輸出字元"%",則應該在「格式控制」字串中用連續兩個%表示。

如:printf("%f%%", 1.0/3);輸出結果: 0.333333%。

11樓:僅僅是追憶

1、使用格式為:printf(「格式化字串",值列表);

2.、格式化控制符:

%d:輸出int型別,short型別,%ld:輸出long型別,%f:輸出float型別,%lf:輸出double型別,%c:輸出char型別。

3、%d或者%ld的其他控制符:%md:m代表這個整數佔多少位,m是一個整數,實際數字不足的位數用空格補齊,如果實際的整數的位數大於或者等於m時,就按實際輸出。

m也可以是負數,那麼代表不足位在後面補齊。

4、%f或者%lf的其他控制符:float是加上小數點一共7位有效,也就是小數點後6位是有效數字,double是加上小數點一共15位有效,也就是小數點後14位是有效數字

12樓:丿染指流年丶丶

printf用法:

如果在程式中要使用 printf 或者 scanf,那麼就必須要包含標頭檔案 stdio.h。因為這兩個函式就是包含在該標頭檔案中的。

printf 函式的原型為:

# include

int printf(const char *format, ...);

printf 的格式有四種:

1、 printf("字串\n");

# include

int main(void)

其中\n表示換行的意思。它是一個轉義字元,前面在講字元常量的時候見過。其中 n 是「new line」的縮寫,即「新的一行」。

此外需要注意的是,printf 中的雙引號和後面的分號必須是在英文輸入法下。雙引號內的字串可以是英文,也可以是中文。

2、 printf("輸出控制符",輸出引數);

# include

int main(void)

這句話的意思是將變數 i 以十進位制輸出。

3、 printf("輸出控制符1 輸出控制符2…", 輸出引數1, 輸出引數2, …);

# include

int main(void)

輸出控制符 1 對應的是輸出引數 1,輸出控制符 2 對應的是輸出引數 2……編譯、連結、執行後我們看一下輸出結果:10 3

4、 printf("輸出控制符 非輸出控制符",輸出引數);

13樓:叫8爸爸

printf函式的一般格式

printf(格式控制字串,輸出表列);

以圖1所示為例。

圖1.函式引數包括兩部分:

【1】格式控制字串,是用雙引號括起來的字串,也稱為轉換控制字串,它指定輸出資料項的型別和格式。

它包括兩種資訊:

●格式說明項:由%和格式字元組成,如%d,%f等。格式說明總是由%字元開始,到格式字元終止。

它的作用是將輸出的資料項轉換為指定的格式輸出。輸出表列中的每個資料項對應一個格式說明項。

● 普通字元:即需要原樣輸出的字元,如逗號和換行符。

【2】輸出列表,是需要輸出的一些資料項,可以是表示式。

例如:假如a=3,b=4,那麼printf("a=%db=%d",a,b);,輸出a=3b=4。其中兩個 「%d」是格式說明,表示輸出兩個整數,分別對應變數a,b。

「a=」,「b=」是普通字元,原樣輸出。

由於printf是函式,因此,格式控制字串和輸出表列實際上都是函式的引數。printf函式的一般形式可以表示為:

printf(引數1,引數2,引數3,…,引數n)

printf函式的功能是將引數2到引數n按照引數1給定的格式輸出。

【3】格式字元 (構成格式說明項)

對於不同型別的資料項,應當使用不同的格式字元構成的格式說明項。常用的有以下幾種格式字元:(按不同型別資料,列出各種格式字元的常用用法)

【d格式符】用來輸出十進位制整數。有以下幾種用法:

● %d,按照資料的實際長度輸出。

● %md,m指定輸出欄位的寬度 (整數)。如果資料的位數小於m,則左端補以空格(右對齊);若大於m,則按照實際位數輸出。

● %-md,m指定輸出欄位的寬度 (整數)。如果資料的位數小於m,則右端補以空格 (左對齊);若大於m,則按照實際位數輸出。

● %ld,輸出長整型資料,也可以指定寬度%mld。

【o格式符】以八進位制形式輸出整數。注意:是將記憶體單元中的各位的值按八進位制形式輸出,輸出的資料不帶符號,即將符號位也一起作為八進位制的一部分輸出。

例如:inta=-1;

printf("%d,%o,%x",a,a,a);

-1的原碼:1000,0000,0000,0001。

-1在記憶體中的補碼錶示為:

1111,1111,1111,1111=1,111,111,111,111,111=1,7,7,7,7,7=ffff

輸出:-1,177777,ffff

【s格式符】用來輸出一個字串。有以下幾種用法:

● %s,輸出字串。

● %ms,輸出的字串佔m列,如果字串長度大於m,則字串全部輸出;若字串長度小於m,則左補空格 (右對齊)。

● %-ms,輸出的字串佔m列,如果字串長度大於m,則字串全部輸出;若字串長度小於m,則右補空格 (左對齊)。

● %m.ns,輸出佔m列,但只取字串左端n個字元,左補空白 (右對齊)。

● %-m.ns,輸出佔m列,但只取字串左端n個字元,右補空白 (左對齊)。

【 f 格式符】用來輸出實數 (包括單、雙精度,單雙精度格式符相同),以小數形式輸出。有以下幾種用法:

● %f,不指定寬度,使整數部分全部輸出,並輸出6位小數。注意,並非全部數字都是有效數字,單精度實數的有效位數一般為7位 (雙精度16位)。

● %m.nf,指定資料佔m列,其中有n位小數。如果數值長度小於m,左端補空格(右對齊)。

● %-m.nf,指定資料佔m列,其中有n位小數。如果數值長度小於m,右端補空格(左對齊)。

【 e 格式符】以指數形式輸出實數。可用以下形式表示:

● %e,不指定輸出資料所佔的寬度和小數位數,由系統自動指定。如6位小數,指數佔5位,-e佔1位,指數符號佔1位,指數佔3位。數值按照規格化指數形式輸出 (小數點前必須有而且只有1位非0數字)。

c語言printf函式可以中途換行嗎

小夏在深圳 可以的。system.out.println ln代表換行,不換行的輸出語句為system.out.print 減號結果左對齊,右邊填空格。預設是右對齊,左邊填空格。加號輸出符號 正號或負號 space空格輸出值為正時加上空格,為負時加上負號 井號type是o x x時,增加字首0 0x...

c語言函式呼叫問題,C語言函式呼叫問題

優化了你的程式,問題好多,你自己研究一下吧 include int ds int x 真心看不懂你的ds 函式思想!有那麼複雜嗎?return x0 int yz int sum1 int main 如果不為顯示中間結果,這些都可以省。x0 ds x sum x x0 n printf 第 d次計算...

C語言printf格式輸出函式中的格式字元問題

你的教材可能太老。現在,只有 double 用到 lf,其它輸出 不需要 添 l.10d 輸出 整型,十進位制,佔10位。long int,short int 都可以用。08x 按16進位制 無符號輸出,小寫,共8 位,不足8位左邊添0 20u 按十進位制 無符號數 輸出,佔20位。不管什麼編譯系統...