學習目標
- 收藏文章報錯可以過來查
[更新數據]
此文將會持續更新,收錄錯誤信息,若本文沒有收錄記得聯系我~ CSDN 1_bit
持續更新中…
[發布日期:2020年11月16日 14:55:00]
更新:
暫無
C語言教程
C語言真的很難嗎?那是你沒看這張圖,化整為零輕松學習C語言。
第一篇:(一)脫離學習誤區
第二篇:(二)C語言沒那么難簡單開發帶你了解流程
第三篇:(三)輕輕松松理解第一個C語言程序
第四篇:(四)語言的基本數據類型及變量
第五篇:(五)C語言的變量、常量及運算
第六篇:(六)輕輕松松了解C語言的邏輯運算
第七篇:(七)C語言的循環分分鐘上手
第八篇:(八)了解基本數組還不是那么簡單
第九篇:(九)C語言二維數組與循環嵌套
第十篇:(十)C語言的指針原來是這樣
第十一篇:(十一)C語言自定義函數真的很簡單
第十二篇:(十二)原來結構體是這么回事
第十三篇:(十三)socket服務端編寫
推薦
歡迎大家關注公眾號,公眾號每滿1024及1024倍數則會抽獎贈送機械鍵盤一份+IT書籍2份喲~
最近發了C語言的基礎教程,得了很多C語言初學者的支持,并且像我詢問了很多問題;通過了解大多數的C語言新手的問題得知,大多數的同學都是犯的類似的錯誤,在此我編寫一篇文,大家若出現問題,查看編輯器的提示報錯信息,復制關鍵字后,在該文章搜搜內容,即可查看,若沒有查詢到可以聯系我,我將在此文收錄該錯誤~ 多謝支持~
錯誤及解決方案如下
錯誤示例1 報錯索引:expected ‘)’ before ‘;’ token
簡介: 第一個C語言程序“HelloWorld”,在一部分新手學習的時候,經常會出現中英文標點混打情況,在絕大多數編程中,標點符號皆是英文的標點符號。
錯誤示例:
#include<stdio.h>
int main()
{printf("HelloWorld");
}
說明: 以上示例,在 printf("HelloWorld")
后的反括號錯將英文的反括號")“打成了中文的”)"。新手不注意觀察將會極難找到這個錯誤。
編輯器典型報錯提示:expected ')' before ';' token
報錯解析: 由于反括號")“錯誤打成了”)",導致編譯器在解析代碼時,發現成對的圓括號少了一半。編譯器這時是懵的,所以通過編輯器問你expected ')' before ';' token
;這句報錯表示“我需要在在分號前的括號你把他丟哪去了?我找不到了,你要還給我”。其實我們通過仔細觀察中文的標點要比英文的標點大一點。
編寫建議: 編寫代碼時最好是成對輸入括號,不要輸入一個括號后接著輸入",然后又繼續輸入HelloWorld;推薦的方式是先輸入成對的符號,例如先輸入一對英文括號(),隨后在一對括號中輸入英文的雙引號"",接著再往雙引號內輸入HelloWorld,這時就保證了標點符號的統一。
正確代碼:
#include<stdio.h>
int main()
{printf("HelloWorld");
}
錯誤示例2 報錯索引: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute’ before ‘<’ token
簡介: 依舊使用第一個C語言程序“HelloWorld”,在一部分新手學習的時候,經常會出現在頭文件飲用前少打#號的情況;這時候去搜索報錯,問題依舊找不到解決辦法。
錯誤示例:
include<stdio.h>
int main()
{printf("HelloWorld");
}
說明: 以上示例,在 include<stdio.h>
前,少打了#號,由于可能會與某一些語言的“#”號注釋記混,就導致了該問題。
編輯器典型報錯提示:expected '=', ',', ';', 'asm' or '__attribute__' before '<' token
報錯解析: 由于少打了#號,導致編譯器在解析代碼時,“胡言亂語”,因為頭文件聲明并沒有太多的內容給予編譯器提示,編譯器只知道,你在<號前少了什么東西,反正就是錯了,編譯器自己也很懵。所以通過編輯器問你expected '=', ',', ';', 'asm' or '__attribute__' before '<' token
;這句報錯表示“我現在啥都不知道,我只懂你在這個地方搞錯了。因為我被你嚇到了,我自己都差點胡言亂語”。這個時候可能你上網搜都搜不到對應的解決辦法,那是因為這個錯,可能錯的不錯(有點尷尬)。
編寫建議: 頭文件就記住#開頭就ok。
正確代碼:
#include<stdio.h>
int main()
{printf("HelloWorld");
}
錯誤示例3 警告索引: incompatible implicit declaration of built-in function ‘printf’
簡介: 依舊使用第一個C語言程序“HelloWorld”,在一部分新手學習的時候,經常會漏掉頭文件的輸入,當然這個問題在某些情況下不會報錯,可能會提示一個警告。
錯誤示例:
int main()
{printf("HelloWorld");
}
說明: 以上示例,沒有輸入頭文件 #include<stdio.h>
前。
編輯器典型報錯提示:[Warning] incompatible implicit declaration of built-in function 'printf'
報錯解析: 由于少打了圖問價引用,導致編譯器在解析代碼時給你了點人情,畢竟頭文件知道printf這些熟人是哪個地方的,所以就免為其難的幫了你一下。
編寫建議: 頭文件是代碼中使用系統函數的支撐,你需要使用什么函數必須告訴編譯器這些東西在哪,如果編譯器不熟,它就無法幫你去找到這些東西。
正確代碼:
#include<stdio.h>
int main()
{printf("HelloWorld");
}
錯誤示例4 報錯索引: undeclared (first use in this function)
簡介: 在編寫C語言時,由于C語言是區分大小寫的,若沒達到設定的標記一致,則會出現錯誤;例如a與A是兩個東西,Age和age也是兩個東西。所以在進行程序別寫時,一定要注意標記的統一。
錯誤示例:
#include<stdio.h>
int main()
{int a=0;printf("%d",A);
}
說明: 以上示例,定義了一個整型變量a,并且初始化值等于0;但是在輸出變量a的時候錯誤的將a寫成了A,導致錯誤的出現。
編輯器典型報錯提示:[Error] 'A' undeclared (first use in this function)
報錯解析: 由于將a打成了大寫A,編譯器在進行編譯的時候,編譯器發現這個A它是第一次遇見,并不知道是啥,所以就將這個信息告訴了你。
編寫建議: 這種情況無法避免,通過報錯提示是較為容易的解決方式,并且變量命名最好有“意義”,可以表達當前變量的含義。
正確代碼:
#include<stdio.h>
int main()
{int a=0;printf("%d",a);
}
錯誤示例5 報錯索引: expected declaration or statement at end of input
簡介: 在編寫C語言時,由于C語言是有區塊、有層級的,并且內容需要通過一定的符號表示當前層級或塊的開始或結束,或者理解為有始有終。若在編寫缺少開頭標記或結束標記將會產生錯誤;較為容易出現的錯誤是結束標記的缺少。
錯誤示例:
#include<stdio.h>
int main()
{
說明: 以上示例,使用helloworld為示例,在helloWorld程序結束后并沒有使用花括號進行結尾說明,導致編譯器報錯。
編輯器典型報錯提示:expected declaration or statement at end of input
報錯解析: 由于尾部沒有添加結束符,編譯器在進行編譯的時候,發現尾部沒有添加標記,所以就將這個信息告訴了你。那為什么編譯器不自動幫你加上去?那是因為編譯器編譯的時候無法判斷你是要做什么,不能從主觀角度考慮你編寫程序產生的錯誤,所以報錯后只能自己修改。
編寫建議: 編寫代碼時最好是成對輸入括號,不要輸入一個括號或后接著輸入,推薦的方式是先輸入成對的符號,例如先輸入一對英文括號()或{},隨后在在其中編寫代碼內容。
正確代碼:
#include<stdio.h>
int main()
{printf("HelloWorld");
}
錯誤示例6 報錯索引: 無報錯
簡介: 在編寫C語言時,使用scanf接收值一定要注意取地址,變量取地址使用取地址符“&”。
錯誤示例:
#include<stdio.h>
int main()
{int a=0;scanf("%d",a);
}
說明: 以上示例, 在將至存入變量a時由于沒有加取地址,這時編譯器不會報錯,因為這個地方是地址,變量a為0也可以作為地址,但是會發生不可估計的后果如程序運行時程序崩潰。
編輯器典型報錯提示:無報錯,編譯順利
報錯解析: 無報錯,但是程序運行時將會出現程序崩潰等情況”。
編寫建議: 熟記語法規則,這是對整體編寫規則的不了解。
正確代碼:
#include<stdio.h>
int main()
{int a=0;scanf("%d",&a);
}
錯誤示例7 報錯索引: 無報錯
簡介: 在編寫C語言時,使用scanf接收多個值,在scanf中最好使用顯式來表示%d或者其它格式說明符的間隔,若是%d%d默認使用空格隔開。
示例:
#include<stdio.h>
int main()
{int a=0;int b=0;scanf("%d%d",&a,&b);printf("%d,%d",a,b);
}
說明: 以上示例, 輸入值時,需要輸入一個值使用空格后再輸入一個值再按enter鍵確認。或者輸入一個值后按下enter,隨后再輸入一個值,此時將會給兩個變量賦值。
編輯器典型報錯提示:無報錯,編譯順利
報錯解析: 無報錯,但是程序運行時自己不清楚如何賦值將會導致某一值賦值失敗”。
編寫建議: 推薦使用scanf("%d,%d",&a,&b);
或其他字符間隔。
代碼:
#include<stdio.h>
int main()
{int a=0;int b=0;scanf("%d %d",&a,&b);printf("%d,%d",a,b);
}
錯誤示例8 報錯索引: 無報錯
簡介: 在編寫C語言時,使用兩個等于號表示判斷等于號左右兩邊的值是否相等;使用一個等于號表示將等于號右邊的值賦值給左邊。
錯誤示例:
#include<stdio.h>
int main()
{int a=0;if(a=1){printf("a等于1");}
}
說明: 以上程序if判斷中將會一直判斷正確,因為并沒有使用兩個等于號判斷,一個等于號是賦值,這個結賦值操作是正確的,將會為Ture。
編輯器典型報錯提示:無報錯,編譯順利
報錯解析: 無報錯,if永遠判斷正確”。
編寫建議: 熟悉語法規則。
代碼:
#include<stdio.h>
int main()
{int a=0;if(a==1){printf("a等于1");}
}
錯誤示例9 報錯索引: 無報錯
簡介: 在編寫C語言時,使用switch若只想進行常規判斷,則必須在每一個case塊內,代碼結束的末端添加break表示跳出;若未添加,則會導致錯誤程序一直運行到下一個case塊內代碼,直到結束或遇見break為止。
錯誤示例:
#include<stdio.h>
int main()
{int a=0;switch(a){case 0:printf("等于0\n");case 1:printf("等于1\n");break;case 2:printf("等于2\n");default:printf("未知\n");}}
說明: 以上進行case判斷后將會運行 printf("等于0\n");
以及printf("等于1\n");
代碼。
編輯器典型報錯提示:無報錯,編譯順利
報錯解析: case判斷正確后將會一直運行之后未加break的case塊代碼。
編寫建議: 熟悉語法規則。
代碼:
#include<stdio.h>
int main()
{int a=0;switch(a){case 0:printf("等于0\n");break;case 1:printf("等于1\n");break;case 2:printf("等于2\n");break;default:printf("未知\n");}}
錯誤示例10 報錯索引: called object ‘printf’ is not a function or function pointer
簡介: 在編寫C語言時,勿將系統函數或其它有含義的標記作為變量或其它使用。
錯誤示例:
#include<stdio.h>
int main()
{int printf=0;printf("%d",printf);
}
**說明:**使用了輸出函數printf作為變量,這是不允許的。
編輯器典型報錯提示:called object 'printf' is not a function or function pointer
報錯解析: 編譯器告訴你,你這個東西用錯了,在這里不是這樣用的,反正編譯器自己就是不給你用。就像你進一個學校,校長叫小明,你說你也叫小明為什么不能進。
編寫建議: 熟悉變量命名規則。
代碼:
#include<stdio.h>
int main()
{int printf_v=0;printf("%d",printf_v);
}
錯誤示例11 報錯索引: 無報錯
簡介: 在編寫C語言時,勿將越界使用數組。
錯誤示例:
#include<stdio.h>
int main()
{int a[2]={0,1};printf("%d",a[3]);
}
**說明:**使用了未確定的區域值,將會造成后果不可控,輸出的值也是隨機的。
編輯器典型報錯提示:無
報錯解析: 無。
編寫建議: 檢查數組,編寫數組使用函數,檢查長度再賦值。
代碼:
#include<stdio.h>
int main()
{int a[2]={0,1};printf("%d",a[1]);
}
我的博客即將同步至 OSCHINA 社區,這是我的 OSCHINA ID:1_bit,邀請大家一同入駐:https://www.oschina.net/sharing-plan/apply