程式設計比賽中發現的問題

2022-04-30 17:57:13 字數 714 閱讀 9374

今天學校舉行程式設計比賽,我用的是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...