定義了一個int型變數k,賦值97,當單獨用%c格式輸出時(printf("k=%c\n",k);)正確顯示為a,可是將k和其它幾個變數用一個printf輸出時,結果就變了,實在無法理解為什么會這樣

#include <stdio.h>
int main()
{
float i, j;
int k;
char m;
i = 1.0/3.0;
j = 0.33333333;
k = 97;
m = 111;
printf("i=%f\n",i);
printf("j=%d\n",j);
printf("k=%c\n",k);
printf("m=%c\n",m);
printf("i=%f j=%d k=%c m=%c\n",i,j,k,m);
return 0;
}
運行后就是這樣,求解!
uj5u.com熱心網友回復:
我覺得這跟你的 j 是 float 型別,但卻用 %d 來列印有關。print的引數是可變的,函式內部會通過列印格式來查找引數。單獨列印 print(“%d\n, j); 時,只有1個引數 j,即使型別不匹配,也不會影響引數的查找(只是截取引數的長度不同);而合在一起列印,print查找引數時,因為 %d 和 j 的型別不符,截取引數的長度不對,影響了下一個引數的查找。
打個比方,j 的記憶體資訊為 01010111
按%d截取為 0101
后面還剩 0111
繼續截取%c的k引數時,直接就把剩余的0111取了,所以k是錯的
再繼續取%c的m引數時,才真正取得了k的資訊,所以m列印出了k的資訊為a
uj5u.com熱心網友回復:
資料型別問題printf("i=%f\n",i);
printf("j=%d\n",(int)j);
printf("k=%c\n",(char)k);
printf("m=%c\n",m);
printf("i=%f j=%d k=%c m=%c\n",i,(int)j,(char)k,m);
uj5u.com熱心網友回復:
謝謝解答

原來printf并沒有那么簡單啊
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/8147.html
標籤:C語言
上一篇:用C++發送QQ郵件
下一篇:關于冒泡排序for回圈的問題
