首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言程式無法執行且無錯誤提示?main 拼寫錯誤 + scanf 參數缺址運算符

     編輯:程式設計綜合問答

代碼問題

// 錯誤 1:主函數拼寫
void maina() { ... }  // 應為 main

// 錯誤 2:scanf 參數未取址
scanf("%d%d%d", nian, yue, ri);  // 應為 &nian, &yue, &ri

為什麼「無錯誤提示卻跑不起來」?

  • 編譯器視 `maina` 為普通函數,專案**缺少入口點 `main`**,連結器報錯 `undefined reference to 'main'` 或 IDE 提示「找不到主函數」。若專案設定錯誤忽略連結錯誤,產生的 exe 根本無法執行。
  • `scanf` 缺 `&` 導致未定義行為**:將變數值當作記憶體位址寫入,輕則輸入錯誤,重則段錯誤崩潰。編譯器**通常只給警告**(`format '%d' expects argument of type 'int *', but argument has type 'int'`),不阻擋編譯。

修正代碼

#include 

int main() {  // 標準簽名:int main(void) 或 int main(int argc, char *argv[])
    int nian, yue, ri;
    printf("請輸入年 月 日: ");
    if (scanf("%d %d %d", &nian, &yue, &ri) == 3) { // 檢查回傳值確保讀取成功
        printf("日期: %d-%02d-%02d\n", nian, yue, ri);
    } else {
        printf("輸入格式錯誤\n");
    }
    return 0;
}

新手必備習慣

  1. **主函數固定寫 `int main()`**,不要改名、不要 `void main()`(非標準)。
  2. **`scanf` 參數永遠加 `&`**(字串 `%s` 陣列名本身是位址除外)。
  3. **檢查 `scanf` 回傳值**(成功讀取的項目數),防止髒資料進入邏輯。
  4. **開啟編譯器警告並視為錯誤**:GCC/Clang `-Wall -Wextra -Werror`,MSVC `/W4 /WX`。警告即錯誤,強迫修正 `scanf` 缺 `&` 等隱患。

總結

程式跑不動且無明確錯誤,多半是**入口點錯誤(main 拼寫/簽名)**或**警告被忽視(scanf 缺 &、型別不符)**。養成 `int main()` + `&` + `-Werror` 三大鐵律,消滅 90% 入門級謎之崩潰。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved