原始錯誤代碼
#include
main()
{
float x,y,a,b;
printf ("請輸入長和寬且用逗號分隔:);
scanf ("%f,%f,&x,&y);
a=x*y;
b=(x+y)*2;
printf ("面積=%f,周長=%f\n",a,b);
}
三大核心錯誤分析
- 頭文件缺失:
#include 後未指定頭文件名,應為 #include <stdio.h>。
- 字符串未閉合:
printf 和 scanf 的格式字符串缺少右雙引號 "。
- scanf 格式字符串錯誤:
"%f,%f,&x,&y" 將地址參數寫在格式字符串內部,正確應為 "%f,%f", &x, &y。
修正後的標準代碼
#include <stdio.h>
int main() {
float x, y, a, b;
printf("請輸入長和寬且用逗號分隔: ");
// 返回值檢查確保輸入有效
if (scanf("%f,%f", &x, &y) != 2) {
printf("輸入格式錯誤!\n");
return 1;
}
a = x * y;
b = (x + y) * 2;
printf("面積 = %.2f, 周長 = %.2f\n", a, b);
return 0;
}
改進點說明
- 主函數返回類型:標準 C 要求
int main() 並返回 0 表示成功。
- 輸入驗證:檢查
scanf 返回值,防止非數字輸入導致變量未初始化。
- 格式化輸出:使用
%.2f 保留兩位小數,提升可讀性。
- 提示信息優化:冒號後加空格,錯誤提示友好。
新手避坑指南
| 常見錯誤 | 正確寫法 | 編譯器提示示例 |
#include 無文件名 | #include <stdio.h> | fatal error: stdio.h: No such file or directory |
| 字符串缺引號 | printf("hello"); | error: missing terminating " character |
scanf("%d", a); 缺 & | scanf("%d", &a); | warning: format '%d' expects argument of type 'int *' |
| main 無返回值 | int main() { return 0; } | warning: control reaches end of non-void function |
擴展練習建議
- 修改程序支持多次計算,直到用戶輸入
q 退出。
- 添加長寬為正數的驗證邏輯。
- 使用
double 替代 float 提高精度。