今天學校舉行程式設計比賽,我用的是c語言,在比賽的過程中我犯了乙個以前沒有注意到的錯誤:型別轉換。
錯誤**如下:
float a;
scanf("%lf",&a);
printf("%f",a);
當輸入1的時候,輸出結果為0.000000。
改成下面這樣:
double a;
scanf("%f",&a);
printf("%lf",a);
輸入為1的時候,輸出結果仍為0.000000。
我推測可能的原因是,scanf函式不會自動進行型別轉換。
絕對正確的寫法應該是:
float a;
scanf("%f",&a);
printf("%f",a);
以及,double a;
scanf("%lf",&a);
printf("%lf",a);
要用型別轉換的話:
float a;
scanf("%f",&a);
printf("%lf",a);
double a;
scanf("%lf",&a);
printf("%f",a);
所以,教訓就是,scanf()函式的格式控制說明必須與變數型別一致,而printf()函式在單精度和雙精度之間可以自由轉換,而不需要強制型別裝換。
(本人知識尚淺,如有錯誤,敬請指正。)
專案中發現的小問題規整
最近的專案由於對ram的要求非常高,所以使用了外部sram,所使用的作業系統ucos ii也使用了記憶體管理,即記憶體申請和釋放,得到經驗如下 1 所執行應用程式第一次是正確的,執行第二次出錯,經過排查,在釋放的時候osmemput commramc ptr,xstring sscommand pt...
刷題中發現曾經的小誤區
利用指標將陣列作為形參傳入 以下以int為例 void change int p,int len 以形式來對陣列中的值進行修改 void change1 int p,int len test case int p 10 for int i 0 i 10 i p i i 分別呼叫change和chan...
linux的platform中發現的一點技巧
linux版本 2.6.25 在linux核心的platform匯流排中,有匯流排裝置,結構體如下 struct platform device 下面是platform object的結構體 struct platform object 讓我們再看看記憶體的分配函式,如下 struct platfo...