錯誤代碼
float f = f 1.1; // 編譯錯誤:expected '=' before numeric constant
問題分析
- 宣告與初始化語法:
型別 變數名 = 初值;
- 缺少
=(賦值運算子),導致編譯器在 f 後看到 1.1 不知道怎麼解析。
- 右側
f 若非宣告前已存在的變數,也是未定義識別符。
正確寫法
float f = 1.1f; // 建議加 f 後綴明確指定 float 常數,避免 double 隱式轉換警告
延伸:浮點數字面常數型別
| 寫法 | 型別 | 備註 |
1.1 | double | 預設 |
1.1f / 1.1F | float | 單精度,賦值給 float 變數無轉換 |
1.1L / 1.1l | long double | 延伸精度 |
常見新手浮點數坑
float f = 0.1; → 0.1 是 double,二進制無法精確表示,轉 float 再轉回 double 印出可能是 0.100000001。
- 比較浮點數**絕不直接用
==**,用 fabs(a-b) < EPS。
scanf("%f", &f) 讀 float,scanf("%lf", &d) 讀 double,**格式字串必須對應**。