⑴ 關於C語言編程時的錯誤
我已經測試了,主要是語法錯誤。在VC++6.0中編譯階段就能得到錯誤信息。要保證代碼正確性,首先代碼格式要良好,這樣才容易找出錯誤。
{a[0].score=a[2].score;j=2;}};這句最後的};是多餘的。
還有一個邏輯問題。學生姓名是字元串類型,最後一句輸出時你卻用%c,顯然應當用%s,並且將a[j].name[20]修改為a[j].name
最後一個建議:最後一句輸出也加上\n
⑵ 基礎C語言編程時易犯錯誤有哪些
一、基礎知識和數據類型、表達式 1、{},[],(),『』,「」不配對。解決這個問題最好的方法就是每當寫這些符號的時候就先寫成一對,然後再在中間加內容。 2、忘記在語句的末尾加分號,或在預處理命令後多加分號。記住:每一個語句的後邊都要加分號,而預處理命令並不是語句,所以不加分號,他們必須每行一條,不能把多個命令寫在一行。 3、混淆/和\;注釋對應的符號是/* */,而轉義字元是以\開頭,除號是/。 4、printf()和scanf()的參數設置有誤,主要表現在以下幾方面: l 類型不匹配的問題。(例如:有float a=3.5,但輸出的時候printf(「a=%d」,a);則屏幕上會顯示出a=0.00000或者提示其它運行錯誤)。基本原則是:float對應%f, int對應%d, char對應%c。 l 個數不匹配。無論是哪個函數,都可以有n個參數,第一個永遠是「」括起來的內容,表示輸出格式。剩下的n-1個是輸出的變數或者輸入的變數的地址。需要注意的是,如果後邊有n-1個參數,那麼前邊一定對應n-1個%f一類的格式說明符。 l scanf()中變數前忘了加&。記住:scanf()中變數前要有&(但後邊學到的字元數組名和指針前不用加) 5、定義標識符的時候經常出現使用非法字元的情況,例如:標識符中不能用空格,也就是說不能有這樣的定義:int radium of circle;一般情況下可用下劃線將三個單詞連接在一起。 6、在使用變數前未定義,或未初始化。例如:若下邊的sum未定義,則在編譯時會提示相應的錯誤信息,而若未初始化為0,則求和的結果一定是錯誤的。 void main() { int I,a[10], sum=0; /*只要下邊要用,這個定義就必須要有,一般情況下也要有初始值*/ for(I=0;I<10;I++) sum+=a[I]; printf(「%d」,sum); } 7、計算錯誤。主要注意:++,――和其它運算符一起運算時,除根據優先順序進行計算時,還要考慮先後位置的特殊含義;數據類型不一致時發生的自動轉換也會導致計算的誤差;還要注意求模結果的符號與被除數相同;某些特殊情況下 使用懶惰求值法。 8、不能除以0,要做合法性檢查; 9、類型溢出。記住每種數據類型的取值范圍,確保數據在所定義類型範圍之內; 10、數學表達式的格式有誤。常見的有:(1)數學與C語言運算表達式的混淆(例如:=表示賦值,而= =才表示我們數學中的相等關系)。(2)、忽略了運算的優先順序。解決這個問題的最好方法就是寫數學表達式時不要從左到右,而是按優先順序的順序寫,寫完優先順序高的一個表達式後加上()再寫下一級的表達式,例如:計算梯形的面積時,要s=((a+b)*h)/2,不要1/2*a+b*h. (3)忽略了計算和賦值時的自動轉換。例如:float half=1/2;這樣,因為=右邊是整數相除的結果為整數0,不會得到0.5存入half,進而會影響下邊的計算結果。要想不在這兒絆跟頭,當計算不同類型的數據時,一定注意會不會出現引起錯誤的自動轉換,建議最好加上強制轉換。(4)賦值號左邊不是變數,例如:若有#define PI 3.14,程序中又出現PI=3.14159。又例如:f(n)=f(n-1)*n(這是典型的數學語言,在C語言中右邊的乘積不能正確存儲,而左邊又是一個函數調用)。 11、使用庫函數前忘了加#include<?.h> 二、流程式控制制 1、 丟掉語句結束標記「;」,尤其是for語句中表達式後或do-while語句後的分號,或在預處理命令後邊、while()後、for()後加「;」; 2、 If語句或循環語句中邏輯表達式或關系表達式書寫錯誤。一定要注意C語言的條件與數學表達式的區別(例如我們數學中經常寫到的0≤x≤9,在C語言中應該寫成x>=0&&x<=9)。 3、 if-else嵌套時不配對。最好在寫每個條件時要用兩個{}分別將兩個分支先括起來,再添加其中的語句,以保證其配對不易錯。 4、 switch()語句中的格式不正確。()中的表達式結果一定是一些明確的值,不能是區間;表達式的所有可能結果要列在case後邊,case與常量之間有一空格,不要丟掉必要的break; 5、 隨意修改循環控制變數i的值,導致循環次數的改變,尤其是當循環有嵌套時。在循環體中,不要將循環控制變數進行另外的改變。 6、 分不清什麼情況下用雙重循環,什麼情況下用兩個控制變數寫成一重循環。當I不變,j又循環一遍的時候用雙重循環。當I,j同時變化的時候用一重循環,此時,循環控制變數有兩個,但條件只寫一個就可以,因為另一個總是進行相應的變化的。 7、 忽略循環體與循環控制變數的關系。其實,很多情況下,循環控制變數都在循環體中起到非常重要的作用。應該利用上這種關系。 三、數組與指針 1、 字元串的輸入有錯誤:主要表現在使用scanf()或gets()時加了&,或輸入字元串時用循環,(這樣的話,字元個數無論多長,都不會為自動加\0,將來引用的時候也就不能以字元串的形式引用。) 2、 對字元串的處理中,循環條件仍然寫成I<N。由於字元串是不定長的,所以循環條件一般為str[I]!=』\0』 或I<strlen(str) 3、 而輸入所對應的變數是指針時(常見的有:輸入的變數是字元數組名或指向字元串的指針)不能加&。 4、 指針定義後未賦值就引用。如果在定義時不知道賦什麼值,可以用p=NULL賦初值,以避免引起的災難性錯誤。 5、 分不清p和*p。前者是指針,即地址,後者表示指針所間接引用的數據,但如果是二級指針或多級指針,取*以後得到的仍然可能是地址。 四、函數 1、 函數定義的時候,函數頭部加分號,而函數聲明的地方忘了加分號 2、 函數實參格式不對,主要表現在:給出實參時,多給出數組類型,或者,形參是數組int a[];的時候,給出的a[]或a[I]. 3、 遞歸時忘了設置邊界條件,這樣易造成死循環調用。 4、使用函數之前未聲明(包括C庫函數的聲明)。建議大家,將所定義的一切函數都在程序開始的預處理命令後加上函數原型的聲明,這樣做不僅可以避免錯誤,而且整個程序的結構看起來更清楚。 五、結構體共用體 1、 結構體類型定義有誤,主要表現在:結構體類型里還有嵌套的時候,忘記了成員名稱。(例如:下邊的例子中,有些同學經常忽略了birthday) 2、 結構體類型名和結構體變數名混淆。例如: struct STU {…. Struct data {int year,month,day; }birthday }; struct STU a; struct STU是類型名稱,而且不分配空間,且不能直接引用。只有定義了結構體類型struct STU的變數a以後,才為a分配相應的內存空間,引用時也要是a.??? 3、 結構體變數的成員引用不正確,尤其是當結構體類型中有嵌套定義的時候。一定要一級一級的引用。例如:上邊的例子:如果引用其中的年的話,一定是a.birthday.year. 不能直接a.year. 4、 對結構體變數進行輸入輸出的時候,整體輸入或整體輸出。除作為函數參數外,不能對結構體變數整體操作,只能一個成員一個成員地輸入、輸出。 5、 不理解共用體的「共占內存」。對共用體中的成員變數,一定要靠一個標記區別它們,並分別按不同類型引用它們。切記:共用體變數不能做函數形參。 六、文件 1、 使用之前沒有打開文件,使用之後沒有關閉文件。 2、 相關函數的調用格式有誤。請一定注意實參的類型、順序、個數上與函數原型(或函數聲明)的一致。
⑶ C語言編程時 都有什麼樣的錯誤提示
Ambiguous operators need parentheses
不明確的運算,需要用括弧括起來
Ambiguous symbol 'xxx'
不明確的符號
Argument list syntax error
參數表語法錯誤
Array bounds missing
丟失數組界限符
Array size too large
數組尺寸太大
Bad character in parameters
參數中有不適當的字元
Bad file name format in include directive
包含命令中文件名格式不正確
Bad ifdef directive syntax
編譯預處理ifdef有語法錯誤
Bad ifndef directive syntax
編譯預處理ifndef有語法錯誤
Bad undef directive syntax
編譯預處理undef有語法錯誤
Call of non-function
調用未定義的函數
Call to function with no prototype
調用函數時沒有函數的說明
Cannot modify a const object
不允許修改常量對象
Case outside of switch
Case 出現在 switch 之外
Case statement missing
漏掉了 Case 語句
Case syntax error
Case 語法錯誤
Case outside of switch
Case 出現在 switch 之外
Case statement missing
漏掉了 Case 語句
Case syntax error
Case 語法錯誤
Code has no effect
代碼不可能執行到
Compound statement missing }
復合語句漏掉了"}"
Conflicting type modifiers
不明確的類型說明符
Constant expression required
要求常量表達式
Constant out of range in comparison
在比較中常量超出范圍
Conversion may lose significant digits
轉換時會掉失有意義的數字
Conversion of near pointer not allowed
不允許轉換返指針
Could not find file 'xxx'
找不到xxx文件
Declaration missing ;
說明缺少分號";"
Declaration syntax error
說明中出現語法錯誤
Default outside of switch
default出現在switch語句之外
Define directive needs an identifier
定義編譯預處理需要標識符
Division by zero
用零作除數
Do statement must have while
do-while語句中缺少while部分
Enum syntax error
枚舉類型語法錯誤
Enumeration constant syntax error
枚舉常數語法錯誤
Error directive: xxx
錯誤的編譯預處理命令
Error writing output file
寫輸出文件錯誤
Expression syntax error
表達式語法錯誤
Extra parameter in call
調用時出現多餘錯誤
File name too long
文件名太長
Function call missing )
函數調用缺少右括弧
Function definition out of place
函數定義位置錯誤
Function should return a value
函數返回一個值
Goto statement missing label
goto 語句沒有標號
Hexadecimal or octal constant too large
16進制或8進制常數太大
Illegal character 'x'
非法字 x
Illegal initialization
非法的初始化
Illegal octal digit
非法的8進制數字
Illegal pointer subtraction
非法的指針相減
Illegal structure operation
非法的結構體操作
Illegal use of pointer
指針使用非法
Improper use of a typedef symbol
類型符號定義使用不恰當
In-line assembly not allowed
不允許使用行間匯編
Incompatible storage class
存儲類別不相容
Incompatible type conversion
不相容的類型轉換
Incorrect number format
錯誤的數據格式
Incorrect use of default
default使用不正確
Invalid indirection
無效的間接運算
Invalid pointer addition
指針相加無效
Irrecible expression tree
無法執行的表達式運算
Lvalur required
需要邏輯值(0或非0值)
Macro argument syntax error
宏參數語法錯誤
Macro expansion too long
宏的擴展以後太長
Mismatched number of parameters in definition
定義中參數個數不匹配
Misplaced break
此處不應出現break語句
Misplaced continue
此處不應出現continue語句
Misplaced decimal point
此處不應出現小數點
Misplaced elif directive
此處不應出現編譯預處理elif
Misplaced else
此處不應出現else
Misplaced else directive
此處不應出現編譯預處理 else
Misplaced endif directive
此處不應出現編譯預處理 endif
Must be addressable
必須是可以編址的
Must take address of memory location
必須存儲定位的地址
No declaration for function 'xxx'
沒有函數 xxx 的說明
No stack
缺少堆棧
No type information
沒有類型信息
Non-portable pointer assignment
不可移動的指針(地址常數)賦值
Non-portable pointer comparison
不可移動的指針(地址常數)比較
Non-portable pointer conversion
不可移動的指針(地址常數)轉換
Not a valid expression format type
不合法的表達式格式
Not an allowed type
不允許使用的類型
Numeric constant too large
數值常數太大
Out of memory
內存不夠用
Parameter 'xxx' is never used
參數 xxx 沒有用到
Pointer required on left side of ->
-> 符號的左邊必須是指針
Possible use of 'xxx' before definition
在定義之前就使用了 xxx(警告)
Possibly incorrect assignment
賦值可能不正確
Redefinition of 'xxx' is not identical
xxx 的兩次定義不一致
Register allocation failure
寄存器定址失敗
Repeat count needs an lvalue
重復計數需要邏輯值
Size of structure or array not known
結構體或數組的大小不確定
Statement missing ;
語句後缺少";"
Structure or union syntax error
結構體或聯合體語法錯誤
Structure size too large
結構體的尺寸太大
Subscripting missing ]
下標缺少右方括弧
Superfluous &with function or array
函數或數組中有多餘的"&"
Suspicious pointer conversion
可疑的指針轉換
Symbol limit exceeded
符號超限
Too few parameters in call
函數調用時的實參少於函數的參數
Too many error or warning messages
錯誤或警告信息太多
Too much auto memory in function
函數中用到的局部存儲太多
Too much global data defined in file
文件中全局數據太多
Too consecutive dots
兩個連續的句點
Type mismatch in parameter xxx
參數xxx類型不匹配
Type mismatch in redeclaration of 'xxx'
xxx 重定義時的類型不匹配
Unable to create output file 'xxx'
無法建立輸出文件 xxx
Unable to open include file 'xxx'
無法打開被包容的文件 xxx
Bit field too large
位欄位太長
Unable to open input file 'xxx'
無法打開輸入文件 xxx
Undefined label 'xxx'
沒有定義的標號 xxx
Undefined structure 'xxx'
沒有定義的結構 xxx
Undefined symbol 'xxx'
沒有定義的符號 xxx
Unexpected end of file in comment started on line xxx
從 xxx 行開始的註解尚未結束,文件不能結束
Unexpected end of file in conditional started on line xxx
從 xxx 行開始的條件語句尚未結束,文件不能結束
Unknown assembler instruction
未知的匯編結構
Unknown option
未知的操作
Unknown preprocessor directive: 'xxx'
不認識的預處理命令 xxx
Unreachable code
無法到達的代碼
Unterminated string or character constant
字元串缺少引號
User break
用戶強行中斷了程序
Void functions may not return a value
void 類型的函數不應有返回值
Wrong number off arguments
調用函數時參數數目錯
'xxx' not an argument
xxx 不是參數
'xxx' not part of structure
xxx 不是結構體的一部分
xxx statement missing (
xxx 語句缺少左括弧
xxx statement missing )
xxx 語句缺少右括弧
xxx statement missing ;
xxx 語句缺少分號
'xxx' declared but never used
說明了 xxx ,但沒有使用
'xxx' is assigned a value which is never used
給 xxx 賦了值,但未用過
Zero length structure
結構體的長度為零