這是一個典型的 C 語言初學者錯誤:在函數定義前錯誤地加上了分號,導致編譯器誤以為是聲明而非定義,進而引發一連串難以理解的錯誤信息。本文通過一個完整的學生成績管理系統案例,詳細講解這個錯誤的成因與修正方法。
void Input(int score[][M+3], int n); // 錯誤:這裡多了一個分號
{
int i, j, sum;
printf("Input Number and %d score:\n", M);
// ... 函數體
}
編譯器會報錯:「expected declaration specifiers before '{' token」或類似信息,初學者往往不知所措,因為大括號明明寫得正確。
在 C 語言中,函數聲明以分號結尾,而函數定義不需要分號。當你在函數頭後加上分號時,編譯器將其視為一個函數聲明,隨後遇到大括號時,認為這是一個獨立的代碼塊,而非函數體,從而報錯。
void Input(int score[][M+3], int n) // 正確:無分號
{
int i, j, sum;
printf("Input Number and %d score:\n", M);
// ... 函數體
}
該程序實現了學生成績的輸入、輸出、按平均分排序等功能,包含以下模塊:
Input():輸入學號及各科成績,自動計算總分和平均分Output():格式化輸出所有學生成績單Sort():冒泡排序,按平均分降序排列main():主控流程,交互式菜單j <= M 應為 j < M, 應改為英文逗號 ,scanf_s 為 MSVC 專用,跨平台建議用 scanf 並檢查返回值一個小小的分號可能導致整個程序無法編譯。養成良好的代碼習慣,仔細區分聲明與定義,使用編輯器的語法高亮功能,能有效避免此類低級錯誤。