❶ c語言 單詞恢復
#include<string.h>#include<stdio.h>void main(){int n,n1,sum1,sum2;scanf("%d",&n); for(i=1;i<=n;i++) {int si[ ];gets(si);}for(i=1;i<=n;i++) puts(si);int s[ ];gets(s);for(i=1;i<=n;i++) { if(strlen(si)=strlen(s)) {for(j=1;j<n1=strlen(s);j++)</p><p> sum1+=si[j],sum2+=s[j];</p><p> if(sum1==sum2)</p><p> puts(si);}} }大概思路是先把正確及不正確的單詞賦給數組、然後用字元串長度函數對比單詞找出與錯誤單詞同長的單詞、再把選出的數組內所有元素求和與錯誤單詞數組內所有元素求和比較、相等則輸出選出的正確數組、復雜了點、想不出來簡單點兒的演算法、、花括符沒有對齊、方便看些、希望可以幫到你、不明白的可以問下、樓組自己注意下語法問題額、、思路是沒錯的、
❷ C語言的錯誤有哪幾類詳細點
C語言常見錯誤小結
C語言的最大特點是:功能強、使用方便靈活。C編譯的程序對語法檢查並不象其它高級語言那麼嚴格,這就給編程人員留下「靈活的餘地」,但還是由於這個靈活給程序的調試帶來了許多不便,尤其對初學C語言的人來說,經常會出一些連自己都不知道錯在哪裡的錯誤。看著有錯的程序,不知該如何改起,本人通過對C的學習,積累了一些C編程時常犯的錯誤,寫給各位學員以供參考。
1.書寫標識符時,忽略了大小寫字母的區別。main(){ int a=5;
printf("%d",A);}編譯程序把a和A認為是兩個不同的變數名,而顯示出錯信息。C認為大寫母
和小寫字母是兩個不同的字元。習慣上,符號常量名用大寫,變數名用小寫表示,以增加可讀性。
2.忽略了變數的類型,進行了不合法的運算。main(){float a,b; printf("%d",a%b);}%是求余運算,得到a/b的整余數。整型變數a和b可以進行求余運算,而實型變數則不允許進行「求余」運算。
3.將字元常量與字元串常量混淆。char c;c="a";在這里就混淆了字元常量與字元串常量,字元常量是由一對單引號括起來的單個字元,字元串常量是一對雙引號括起來的字元序列。C規定以「\」作字元串結束標志,它是由系統自動加上的,所以字元串「a」實際上包含兩個字元:『a'和『\',而把它賦給一個字元變數是不行的。
4.忽略了「=」與「==」的區別。在許多高級語言中,用「=」符號作為關系運算符「等於」。如在BASIC程序中
可以寫if (a=3) then …但C語言中,「=」是賦值運算符,「==」是關系運算符。如:if (a==3) a=b;前者是進行比較,a是否和3相等,後者表示如果a和3相等,把b值賦給a。由於習慣問題,初學者往往會犯這樣的錯誤。
5.忘記加分號。分號是C語句中不可缺少的一部分,語句末尾必須有分號。a=1b=2編譯時,編譯程序在「a=1」後面沒發現分號,就把下一行「b=2」也作為上一行語句的一部分,這就會出現語法錯誤。改錯時,有時在被指出有錯的一行中未發現錯誤,就需要看一下上一行是否漏掉了分號。{ z=x+y;t=z/100;printf("%f",t);}對於復合語句來說,最後一個語句中最後的分號不能忽略不寫(這是和PASCAL不同的)。
6.多加分號。對於一個復合語句,如:{ z=x+y;t=z/100;printf("%f",t);};復合語句的花括弧後不應再加分號,否則將會畫蛇添足。又如:if (a%3==0);I++;本是如果3整除a,則I加1。但由於if (a%3==0)後多加了分號,則if語句到此結束,程序將執行I++語句,不論3是否整除a,I都將自動加1。再如:for (I=0;I<5;I++);{scanf("%d",&x);printf("%d",x);}本意是先後輸入5個數,每輸入一個數後再將它輸出。由於for()後多加了一個分號,使循環體變為空語句,此時只能輸入一個數並輸出它。
7.輸入變數時忘記加地址運算符「&」。int a,b;scanf("%d%d",a,b);
這是不合法的。Scanf函數的作用是:按照a、b在內存的地址將a、b的值存進去。「&a」指a在內存中的地址。
8.輸入數據的方式與要求不符。①scanf("%d%d",&a,&b);輸入時,不能用逗號作兩個數據間的分隔符,如下面輸入不合法:3,4�輸入數據時,在兩個數據之間以一個或多個空格間隔,也可用回車鍵,跳格鍵tab。②scanf("%d,%d",&a,&b);C規定:如果在「格式控制」字元串中除了格式說明以外還有其它字元,則在輸入數據時應輸入與這些字元相同的字元。下面輸入是合法的:3,4�此時不用逗號而用空格或其它字元是不對的。3 4� 3:4�又如:scanf("a=%d,b=%d",&a,&b);輸入應如以下形式:a=3,b=4�
9.輸入字元的格式與要求不一致。在用「%c」格式輸入字元時,「空格字元」和「轉義字元」都作為有效字元輸入。scanf("%c%c%c",&c1,&c2,&c3);如輸入a b c�字元「a」送給c1,字元「 」送給c2,字元「b」送給c3,因為%c只要求讀入一個字元,後面不需要用空格作為兩個字元的間隔。
10.輸入輸出的數據類型與所用格式說明符不一致。例如,a已定義為整型,b定義為實型a=3;b=4.5;printf("%f%d\n",a,b);編譯時不給出出錯信息,但運行結果將與原意不符。這種錯誤尤其需要注意。
11.輸入數據時,企圖規定精度。scanf("%7.2f",&a);這樣做是不合法的,輸入數據時不能規定精度。
12.switch語句中漏寫break語句。例如:根據考試成績的等級列印出百分制數段。switch(grade){ case 'A':printf("85~100\n");case 'B':printf("70~84\n");case 'C':printf("60~69\n");case 'D':printf("<60\n");default:printf("error\n");由於漏寫了break語句,case只起標號的作用,而不起判斷作用。因此,當grade值為A時,printf函數在執行完第一個語句後接著執行第二、三、四、五個printf函數語句。正確寫法應在每個分支後再加上「break;」。例如case 'A':printf("85~100\n");break;
13.忽視了while和do-while語句在細節上的區別。(1)main(){int a=0,I;scanf("%d",&I);while(I<=10){a=a+I;I++;}printf("%d",a);}(2)main(){int a=0,I;scanf("%d",&I);do{a=a+I;I++;}while(I<=10);printf("%d",a);}可以看到,當輸入I的值小於或等於10時,二者得到的結果相同。而當I>10時,二者結果就不同了。因為while循環是先判斷後執行,而do-while循環是先執行後判斷。對於大於10的數while循環一次也不執行循環體,而do-while語句則要執行一次循環體。
14.定義數組時誤用變數。int n;
scanf("%d",&n);int a[n];數組名後用方括弧括起來的是常量表達式,可以包括常量和符號常量。即C不允許對數組的大小作動態定義。
15.在定義數組時,將定義的「元素個數」誤認為是可使的最大下標值。main(){static int a[10]={1,2,3,4,5,6,7,8,9,10};printf("%d",a[10]);}C語言規定:定義時用a[10],表示a數組有10個元素。其下標值由0開始,所以數組元素a[10]是不存在的。
16.初始化數組時,未使用靜態存儲。int a[3]={0,1,2};這樣初始化數組是不對的。C語言規定只有靜態存儲(static)數組和外部存儲(exterm)數組才能初始化。應改為:static int a[3]={0,1,2};17.在不應加地址運算符&的位置加了地址運算符。
scanf("%s",&str);C語言編譯系統對數組名的處理是:數組名代表該數組的起始地址,且scanf函數中的輸入項是字元數組名,不必要再加地址符&。應改為:scanf("%s",str);18.同時定義了形參和函數中的局部變數。int max(x,y)int x,y,z;{z=x>y?x:y;return(z);}形參應該在函數體外定義,而局部變數應該在函數體內定義。應改為:int max(x,y)int x,y;{int z;z=x>y?x:y;return(z);}
❸ C語言錯誤:left operand must be l-value
error C2106: '=' :left operand must be l-value 表示等號左邊必須為一個左值,該處錯誤為等號左邊為*p+ij是表達式,不是一個左值。
問題分析
C語言的符號優先順序表格(部分)如下表:
此時賦值符 = 左邊均為左值即可被賦值的變數或存儲空間。故使用賦值符 = 時應對其左邊的內容稍遲晌加關注,避免此類由於優先順序導致的語法錯誤。
(3)c語言錯誤單詞擴展閱讀
值得注意的是,賦值符正確使用時會附帶隱含的類型轉換,如果賦值運算符讓鏈兩邊的數據類型不相同,系統將自動進行類型轉換,即把賦值號右邊的類型換成左邊的類型。具體規定如下:
1、實型賦予整型,捨去小數部分。此處應注意C語言的捨去一般採用截斷捨去,對整數部分不影響。
2、整型賦予實型,數值不變,但將以浮點形式存放,即增加小數部分,一般小數部分的值為0,但由於浮點數精度問題可能產生誤差。
3、字元型賦予整型,由於字元型為一個位元組,而整型為二個位元組,故將字元的ASCII碼值放到整型量的低八位中,高八位為0。整型賦予字元型,只把低八位賦予字坦旦孫符量。此處實際賦值時與選擇的編譯器有關,具體編譯器需要具體分析。
❹ c語言編程中 報錯"stray '\161'in progtam" 是什麼意思
如果VC編譯器出現如此錯誤提示"stray '161'in progtam",說明你用了全形符號的空格。
直接從網上拷貝代碼貼到Dev C++中會經常遇到 stray '161' in program 錯誤,其實問題出在代碼中摻入了一些不合法的空格(全形空格),把每行代碼後的空格刪掉即OK了!
C語言錯誤對照表:
1. Ambiguous operators need parentheses — 不明確的運算需要用括弧括起
2. Ambiguous symbol 'xxx' — 不明確的符號
3. Argument list syntax error — 參數表語法錯誤
4. Array bounds missing — 丟失數組界限符
5. Array size toolarge — 數組尺寸太大
6. Bad character in paramenters — 參數中有不適當的字元
7. Bad file name format in include directive — 包含命令中文件名格式不正確
8. Bad ifdef directive synatax — 編譯預處理ifdef有語法錯
9. Bad undef directive syntax — 編譯預處理undef有語法錯
10. Bit field too large — 位欄位太長
11. Call of non-function — 調用未定義的函數
12. Call to function with no prototype — 調用函數時沒有函數的說明
13. Cannot modify a const object — 不允許修改常量對象
14. Case outside of switch — 漏掉了case 語句
15. Case syntax error — Case 語法錯誤
16. Code has no effect — 代碼不可能執行到
17. Compound statement missing{ — 分程序漏掉"{"
18. Conflicting type modifiers — 不明確的類型說明符
19. Constant expression required — 要求常量表達式
20. Constant out of range in comparison — 在比較中常量超出范圍
21. Conversion may lose significant digits — 轉換時會丟失意義的數字
22. Conversion of near pointer not allowed — 不允許轉換近指針
23. Could not find file 'xxx' — 找不到XXX文件
24. Declaration missing ; — 說明缺少";"
25. Declaration syntax error — 說明中出現語法錯誤
26. Default outside of switch — Default 出現在switch語句之外
27. Define directive needs an identifier — 定義編譯預處理需要標識符
28. Division by zero — 用零作除數
29. Do statement must have while — Do-while語句中缺少while部分
30. Enum syntax error —巧雀陸 枚舉類型語法錯誤
31. Enumeration constant syntax error — 枚舉常數語法錯誤
32. Error directive :xxx — 錯誤的編譯預處理命令
33. Error writing output file — 寫輸出文件錯誤
34. Expression syntax error — 表達式語法錯誤
35. Extra parameter in call — 調用時出現多餘錯誤
36. File name too long — 文件名太長
37. Function call missing ) — 函數調用缺少歲族右括弧
38. Fuction definition out of place — 函數定孝頃義位置錯誤
39. Fuction should return a value — 函數必需返回一個值
40. Goto statement missing label — Goto語句沒有標號
41. Hexadecimal or octal constant too large — 16進制或8進制常數太大
42. Illegal character 'x' — 非法字元x
43. Illegal initialization — 非法的初始化
44. Illegal octal digit — 非法的8進制數字
45. Illegal pointer subtraction — 非法的指針相減
46. Illegal structure operation — 非法的結構體操作
47. Illegal use of floating point — 非法的浮點運算
48. Illegal use of pointer — 指針使用非法
49. Improper use of a typedefsymbol — 類型定義符號使用不恰當
50. In-line assembly not allowed — 不允許使用行間匯編
51. Incompatible storage class — 存儲類別不相容
52. Incompatible type conversion — 不相容的類型轉換
53. Incorrect number format — 錯誤的數據格式
54. Incorrect use of default — Default使用不當
55. Invalid indirection — 無效的間接運算
56. Invalid pointer addition — 指針相加無效
57. Irrecible expression tree — 無法執行的表達式運算
58. Lvalue required — 需要邏輯值0或非0值
59. Macro argument syntax error — 宏參數語法錯誤
60. Macro expansion too long — 宏的擴展以後太長
61. Mismatched number of parameters in definition — 定義中參數個數不匹配
62. Misplaced break — 此處不應出現break語句
63. Misplaced continue — 此處不應出現continue語句
64. Misplaced decimal point — 此處不應出現小數點
65. Misplaced elif directive — 不應編譯預處理elif
66. Misplaced else — 此處不應出現else
67. Misplaced else directive — 此處不應出現編譯預處理else
68. Misplaced endif directive — 此處不應出現編譯預處理endif
69. Must be addressable — 必須是可以編址的
70. Must take address of memory location — 必須存儲定位的地址
71. No declaration for function 'xxx' — 沒有函數xxx的說明
72. No stack — 缺少堆棧
73. No type information — 沒有類型信息
74. Non-portable pointer assignment — 不可移動的指針(地址常數)賦值
75. Non-portable pointer comparison — 不可移動的指針(地址常數)比較
76. Non-portable pointer conversion — 不可移動的指針(地址常數)轉換
77. Not a valid expression format type — 不合法的表達式格式
78. Not an allowed type — 不允許使用的類型
79. Numeric constant too large — 數值常太大
80. Out of memory — 內存不夠用
81. Parameter 'xxx' is never used — 能數xxx沒有用到
82. Pointer required on left side of -> — 符號->的左邊必須是指針
83. Possible use of 'xxx' before definition — 在定義之前就使用了xxx(警告)
84. Possibly incorrect assignment — 賦值可能不正確
85. Redeclaration of 'xxx' — 重復定義了xxx
86. Redefinition of 'xxx' is not identical — xxx的兩次定義不一致
87. Register allocation failure — 寄存器定址失敗
88. Repeat count needs an lvalue — 重復計數需要邏輯值
89. Size of structure or array not known — 結構體或數給大小不確定
90. Statement missing ; — 語句後缺少";"
91. Structure or union syntax error — 結構體或聯合體語法錯誤
92. Structure size too large — 結構體尺寸太大
93. Sub scripting missing ] — 下標缺少右方括弧
94. Superfluous & with function or array — 函數或數組中有多餘的"&"
95. Suspicious pointer conversion — 可疑的指針轉換
96. Symbol limit exceeded — 符號超限
97. Too few parameters in call — 函數調用時的實參少於函數的參數不
98. Too many default cases — Default太多(switch語句中一個)
99. Too many error or warning messages — 錯誤或警告信息太多
100. Too many type in declaration — 說明中類型太多
101. Too much auto memory in function — 函數用到的局部存儲太多
102. Too much global data defined in file — 文件中全局數據太多
103. Two consecutive dots — 兩個連續的句點
104. Type mismatch in parameter xxx — 參數xxx類型不匹配
105. Type mismatch in redeclaration of 'xxx' — xxx重定義的類型不匹配
106. Unable to create output file 'xxx' — 無法建立輸出文件xxx
107. Unable to open include file 'xxx' — 無法打開被包含的文件xxx
108. Unable to open input file 'xxx' — 無法打開輸入文件xxx
109. Undefined label 'xxx' — 沒有定義的標號xxx
110. Undefined structure 'xxx' — 沒有定義的結構xxx
111. Undefined symbol 'xxx' — 沒有定義的符號xxx
112. Unexpected end of file in comment started on line xxx — 從xxx行開始的註解尚未結束文件不能結束
113. Unexpected end of file in conditional started on line xxx — 從xxx 開始的條件語句尚未結束文件不能結束
114. Unknown assemble instruction — 未知的匯編結構
115. Unknown option — 未知的操作
116. Unknown preprocessor directive: 'xxx' — 不認識的預處理命令xxx
117. Unreachable code — 無路可達的代碼
118. Unterminated string or character constant — 字元串缺少引號
119. User break — 用戶強行中斷了程序
120. Void functions may not return a value — Void類型的函數不應有返回值
121. Wrong number of arguments — 調用函數的參數數目錯
122. 'xxx' not an argument — xxx不是參數
123. 'xxx' not part of structure — xxx不是結構體的一部分
124. xxx statement missing ( — xxx語句缺少左括弧
125. xxx statement missing ) — xxx語句缺少右括弧
126. xxx statement missing ; — xxx缺少分號
127. xxx' declared but never used — 說明了xxx但沒有使用
128. xxx' is assigned a value which is never used — 給xxx賦了值但未用過
❺ c語言數據結構里的false、error、overflow、infeasible用法好像啊。分別用在什麼地方啊
overflow一般用於exit的參數中,比如創建指針時,一般判斷一下內存是否分配成功,不成功一般調用returnexit(overflow);
infeasible其意思是不可行的,一般在某個判斷中,如果什麼什麼不可行,就會returninfeasible例如:求後繼昌哪元素時,如果是最後一個元素,則求其後繼是不可行的,此時就會returninfeasible;
很多函數的返回類好耐型都是Status,這里Status是用typedef定義的intl類型即:typedefintStatus;在這樣的函數友迅春中根據不同情況返回ture或falseok或error。
StatusListEmpty(SqListL)
{
//若L為空表,則返回TRUE,否則返回FALSE
if(L.length==0)
{
returnTRUE;
}
else
{
returnFALSE;
}
}
StatusGetElem(SqListL,inti,ElemType*e)
{
//用e返回L中的第i個元素的值,1=<i<=ListLength(L)
if(i<1||i>L.length)
{
returnERROR;
}
*e=*(L.elem+i-1);
returnOK;
}
(5)c語言錯誤單詞擴展閱讀
C語言append()方法為切片添加元素
Go語言的內建函數append()可以為切片動態添加元素。 每個切片會指向一個底層數組,這個數組能容納一定數量的元素。
當底層數組不能容納新增的元素時,切片就會自動按照一定的策略進行「擴容」,此時該切片指向的底層數組就會更換。「擴容」操作往往發生在append()函數調用時。 舉個例子:
❻ c語言的錯誤:declaration syntax error是什麼意思
一般只要羨段C語言非法語法都會提示兄李譽
declaration syntax error
那麼你的問題是:
textbackground(5)
textcolor(6)
出現問題,沒有語句擾纖結束符「;」
❼ c語言出現錯誤141怎樣解決謝謝了
\ 是轉義符,如果後面是數字,就表示ASCII數值對應的字元,這里的數字通常是1-3位八進制數,也有用\xNN形式的十六進製表示的。(關游讓猛於ASCII碼可以網路一下)
LZ的寫法有神橋錯誤,應該是'\141' 沒有後面那個\
\141表示ASCII值為八進制141的字元,當然就是a
\101表示ASCII值為八進制101的字元,滑碼是A
❽ c語言編程中出現的糾錯英文語句是啥意思
編譯錯誤信息
說明:Turbo C 的源程序錯誤分為三種類型:致命錯誤、一般錯誤和警告。其中,致命錯誤通常是內部編譯出錯;一般錯誤指程序的語法錯誤、磁碟或內存存取錯誤或命令衫瞎行錯誤等;警告則只是指出一些得懷疑的情況,它並不防止編譯的進行。
下面按字母順序A~Z分別列出致命錯誤及一般錯誤信息,英漢對照及處理方法:
(一)、致命錯誤英漢對照及處理方法:
A-B致命錯誤
Bad call of in-line function (內咐塌岩部函數非法調用)
分析與處理:在使用一個宏定義的內部函數時,沒能正確調用。一個內部函數以兩個下劃線(__)開始和結束。
Irrecable expression tree (不可約表達式樹)
分析與處理:這種錯誤指的是文件行中的表達式太復雜,使得代碼生成程序無法為它生成代碼。這種表達式必須避免使用。
Register allocation failure (存儲器分配失敗)
分析與處理:這種錯誤指的是文件行中的表達式太復雜,代碼生成程序無法為它生成代碼。此時應簡化這種繁雜的表達式或乾脆避免使用它。
(二)、一般錯誤信息英漢照及處理方法
#operator not followed by maco argument name(#運算符後沒跟宏變元名)
分析與處理:在宏定義中,#用於標識一宏變串。「#」號後必須跟一個宏變元名。
'xxxxxx' not anargument ('xxxxxx'不是函數參數)
分析與處理:在源程序中將該標識符定義為一個函數參數,但此標識符沒有在函數中出現。
Ambiguous symbol 'xxxxxx' (二義性符號'xxxxxx')
分析與處理:兩個或多個結構的某一域名相同,但具有的偏移、類型不同。在變數或表達式中引用該域而未帶結構名時,會產生二義性,此時需修改某個域名或在引用時加上結構名。
Argument # missing name (參數#名丟失)
分析與處理:參數名已脫離用於定義函數的函數原型。如果函數以原型定義,該函數必須包含所有的參數名。
Argument list syntax error (參數表出現語法錯誤)
分析與處理:函數調用的參數間必須以逗號隔開,並以一個右括弧結束。若源衡御文件中含有一個其後不是逗號也不是右括弧的參數,則出錯。
Array bounds missing (數組的界限符"]"丟失)
分析與處理:在源文件中定義了一個數組,但此數組沒有以下右方括弧結束。
Array size too large (數組太大)
分析與處理:定義的數組太大,超過了可用內存空間。
Assembler statement too long (匯編語句太長)
分析與處理:內部匯編語句最長不能超過480位元組。
Bad configuration file (配置文件不正確)
分析與處理:TURBOC.CFG配置文件中包含的不是合適命令行選擇項的非註解文字。配置文件命令選擇項必須以一個短橫線開始。
Bad file name format in include directive(包含指令中文件名格式不正確)
分析與處理:包含文件名必須用引號("filename.h")或尖括弧(<filename>)括起來,否則將產生本類錯誤。如果使用了宏,則產生的擴展文本也不正確,因為無引號沒辦法識別。
Bad ifdef directive syntax (ifdef指令語法錯誤)
分析與處理:#ifdef必須以單個標識符(只此一個)作為該指令的體。
Bad ifndef directive syntax (ifndef指令語法錯誤)
分析與處理:#ifndef 必須以單個標識符(只此一個)作為該指令的體。
Bad undef directive syntax (undef指令語法錯誤)
分析與處理:#undef指令必須以單個標識符(只此一個)作為該指令的體。
Bad file size syntax (位欄位長語法錯誤)
分析與處理:一個位欄位長必須是1—16位的常量表達式。
Call of non-functin (調用未定義函數)
分析與處理:正被調用的函數無定義,通常是由於不正確的函數聲明或函數名拼錯而造成。
Cannot modify a const object (不能修改一個長量對象)
分析與處理:對定義為常量的對象進行不合法操作(如常量賦值)引起本錯誤。
Case outside of switch (Case 出現在switch外)
分析與處理:編譯程序發現Case語句出現在switch語句之外,這類故障通常是由於括弧不匹配造成的。
Case statement missing (Case語句漏掉)
分析與處理:Case語必須包含一個以冒號結束的常量表達式,如果漏了冒號或在冒號前多了其它符號,則會出現此類錯誤。
Character constant too long (字元常量太長)
分析與處理:字元常量的長度通常只能是一個或兩個字元長,超過此長度則會出現這種錯誤。
Compound statement missing (漏掉復合語句)
分析與處理:編譯程序掃描到源文件未時,未發現結束符號 (大括弧),此類故障通常是由於大括弧不匹配所致。
Conflicting type modifiers (類型修飾符沖突)
分析與處理:對同一指針,只能指定一種變址修飾符(如near 或far);而對於同一函數,也只能給出一種語言修飾符(如Cdecl、pascal或interrupt)。
Constant expression required (需要常量表達式)
分析與處理:數組的大小必須是常量,本錯誤通常是由於#define常量的拼寫錯誤引起。
Could not find file 'xxxxxx.xxx' (找不到'xxxxxx.xx'文件)
分析與處理:編譯程序找不到命令行上給出的文件。
Declaration missing (漏掉了說明)
分析與處理:當源文件中包含了一個struct或 union域聲明,而後面漏掉了分號,則會出現此類錯誤。
Declaration needs type or storage class(說明必須給出類型或存儲類)
分析與處理:正確的變數說明必須指出變數類型,否則會出現此類錯誤。
Declaration syntax error (說明出現語法錯誤)
分析與處理:在源文件中,若某個說明丟失了某些符號或輸入多餘的符號,則會出現此類錯誤。
Default outside of switch (Default語句在switch語句外出現)
分析與處理:這類錯誤通常是由於括弧不匹配引起的。
Define directive needs an identifier (Define指令必須有一個標識符)
分析與處理:#define 後面的第一個非空格符必須是一個標識符,若該位置出現其它字元,則會引起此類錯誤。
Division by zero (除數為零)
分析與處理:當源文件的常量表達式出現除數為零的情況,則會造成此類錯誤。
Do statement must have while (do語句中必須有While關鍵字)
分析與處理:若源文件中包含了一個無While關鍵字的 do語句,則出現本錯誤。
DO while statement missing ( (Do while語句中漏掉了符號 "(")
分析與處理:在do語句中,若 while關鍵字後無左括弧,則出現本錯誤。
Do while statement missing;(Do while語句中掉了分號)
分析與處理:在DO語句的條件表達式中,若右括弧後面無分號則出現此類錯誤。
Duplicate Case (Case情況不唯一)
分析與處理:Switch語句的每個case必須有一個唯一的常量表達式值。否則導致此類錯誤發生。
Enum syntax error (Enum語法錯誤)
分析與處理:若enum說明的標識符表格式不對,將會引起此類錯誤發生。
Enumeration constant syntax error (枚舉常量語法錯誤)
分析與處理:若賦給enum類型變數的表達式值不為常量,則會導致此類錯誤發生。
Error Directive : xxxx (Error指令:xxxx)
分析與處理:源文件處理#error指令時,顯示該指令指出的信息。
Error Writing output file (寫輸出文件錯誤)
分析與處理:這類錯誤通常是由於磁碟空間已滿,無法進行寫入操作而造成。
Expression syntax error (表達式語法錯誤)
分析與處理:本錯誤通常是由於出現兩個連續的操作符,括弧不匹配或缺少括弧、前一語句漏掉了分號引起的。
Extra parameter in call (調用時出現多餘參數)
分析與處理:本錯誤是由於調用函數時,其實際參數個數多於函數定義中的參數個數所致。
Extra parameter in call to xxxxxx(調用xxxxxxxx函數時出現了多餘參數)
File name too long (文件名太長)
分析與處理:#include指令給出的文件名太長,致使編譯程序無法處理,則會出現此類錯誤。通常DOS下的文件名長度不能超過 64個字元。
For statement missing ) (For語名缺少")")
分析與處理:在 for語句中,如果控製表達式後缺少右括弧,則會出現此類錯誤。
For statement missing( (For語句缺少"(")
For statement missing; (For 語句缺少";")
分析與處理:在 for語句中,當某個表達式後缺少分號,則會出現此類錯誤。
Function call missing) (函數調用缺少")")
分析與處理:如果函數調用的參數表漏掉了右手括弧或括弧不匹配,則會出現此類錯誤。
Function definition out ofplace (函數定義位置錯誤)
Function doesn't take a variable number of argument(函數不接受可變的參數個數)
Goto statement missing label (Goto語句缺少標號)
If statement missing( (If語句缺少"(")
If statement missing) (If語句缺少")")
lllegal initalization (非法初始化)
lllegal octal digit (非法八進制數)
分析與處理:此類錯誤通常是由於八進制常數中包含了非八進制數字所致。
lllegal pointer subtraction (非法指針相減)
lllegal structure operation (非法結構操作)
lllegal use of floating point (浮點運算非法)
lllegal use of pointer (指針使用非法)
Improper use of a typedef symbol (typedef符號使用不當)
Incompatible storage class (不相容的存儲類型)
Incompatible type conversion (不相容的類型轉換)
Incorrect commadn line argument:xxxxxx (不正確的命令行參數:xxxxxxx)
Incorrect commadn file argument:xxxxxx (不正確的配置文件參數:xxxxxxx)
Incorrect number format (不正確的數據格式)
Incorrect use of default (deflult不正確使用)
Initializer syntax error (初始化語法錯誤)
Invaild indrection (無效的間接運算)
Invalid macro argument separator (無效的宏參數分隔符)
Invalid pointer addition (無效的指針相加)
Invalid use of dot (點使用錯)
Macro argument syntax error (宏參數語法錯誤)
Macro expansion too long (宏擴展太長)
Mismatch number of parameters in definition(定義中參數個數不匹配)
Misplaced break (break位置錯誤)
Misplaced continue (位置錯)
Misplaced decimal point (十進制小數點位置錯)
Misplaced else (else 位置錯)
Misplaced else driective (clse指令位置錯)
Misplaced endif directive (endif指令位置錯)
Must be addressable (必須是可編址的)
Must take address of memory location (必須是內存一地址)
No file name ending (無文件終止符)
No file names given (未給出文件名)
Non-protable pointer assignment (對不可移植的指針賦值)
Non-protable pointer comparison (不可移植的指針比較)
Non-protable return type conversion (不可移植的返回類型轉換)
Not an allowed type (不允許的類型)
Out of memory (內存不夠)
Pointer required on left side of (操作符左邊須是一指針)
Redeclaration of 'xxxxxx' ('xxxxxx'重定義)
Size of structure or array not known (結構或數組大小不定)
Statement missing; (語句缺少「;」)
Structure or union syntax error (結構或聯合語法錯誤)
Structure size too large (結構太大)
Subscription missing ] (下標缺少『]』)
Switch statement missing ( (switch 語句缺少"(")
Switch statement missing ) (switch 語句缺少")")
Too few parameters in call (函數調用參數太少)
Too few parameter in call to'xxxxxx'(調用'xxxxxx'時參數太少)
Too many cases (Cases太多)
Too many decimal points (十進制小數點太多)
Too many default cases (defaut太多)
Too many exponents (階碼太多)
Too many initializers (初始化太多)
Too many storage classes in declaration (說明中存儲類太多)
Too many types in decleration (說明中類型太多)
Too much auto memory in function (函數中自動存儲太多)
Too much global define in file (文件中定義的全局數據太多)
Two consecutive dots (兩個連續點)
Type mismatch in parameter # (參數"#"類型不匹配)
Type mismatch in parameter # in call to 'XXXXXXX' (調用'XXXXXXX'時參數#類型不匹配)
Type missmatch in parameter 'XXXXXXX' (參數'XXXXXXX'類型不匹配)
Type mismatch in parameter 'YYYYYYYY' in call to 'YYYYYYYY'(調用'YYYYYYY'時參數'XXXXXXXX'數型不匹配)
Type mismatch in redeclaration of 'XXX' (重定義類型不匹配)
Unable to creat output file 'XXXXXXXX.XXX' (不能創建輸出文件'XXXXXXXX.XXX')
Unable to create turboc.lnk (不能創建turboc.lnk )
Unable to execute command 'xxxxxxxx'(不能執行'xxxxxxxx'命令)
Unable to open include file 'xxxxxxx.xxx' (不能打開包含文件'xxxxxxxx.xxx')
Unable to open inputfile 'xxxxxxx.xxx' (不能打開輸入文件'xxxxxxxx.xxx')
Undefined label 'xxxxxxx' (標號'xxxxxxx'未定義)
Undefined structure 'xxxxxxxxx' (結構'xxxxxxxxxx'未定義)
Undefined symbol 'xxxxxxx' (符號'xxxxxxxx'未定義)
Unexpected end of file in comment started on line #(源文件在某個注釋中意外結束)
Unexpected end of file in conditional stated on line # (源文件在#行開始的條件語句中意外結束)
Unknown preprocessor directive 'xxx' (不認識的預處理指令:'xxx')Untermimated character constant (未終結的字元常量)
Unterminated string (未終結的串)
Unterminated string or character constant(未終結的串或字元常量)
User break (用戶中斷)
Value required (賦值請求)
While statement missing ( (While語句漏掉 '(')
While statement missing ) (While語句漏掉 ')')
Wrong number of arguments in of 'xxxxxxxx' (調用'xxxxxxxx'時參數個數錯誤)
❾ C語言編程最常見的15個錯誤
C語言編程最常見的15個錯誤
C語言是一種結構化語言。它層次清晰,便於按模塊化方式組織程序,易於調試和維護。以下是關於C語言編程伏大最常見的15個錯誤,希望大家認真閱讀!
1.書寫標識符時,忽略了大小寫字母的區別。
main()
{ int a=5;
printf("%d",A); }
編譯程序把a和A認為是兩個不同的變數名,而顯示出錯信息。C認為大寫字母和小寫字母是兩個不同的字元。習慣上,符號常量名用大寫,變數名用小寫表示,以增加可讀性。
2.忽略了變數的類型,進行了不合法的運算。
main()
{ float a,b;
printf("%d",a%b); }
%是求余運算,得到a/b的整余數。整型變數a和b可以進行求余運算,而實型變數則不允許進行“求余”運算。
3.將字元常量與字元串常量混淆。
char c;
c="a";
在這里就混淆了字元常量與字元串常量,字元常量是由一對單引號括起來的單個字元,字元串常量是一對雙引號括起來的字元序列。C規定以“”作字元串結束標志,它是由系統自動加上的,所以字元串“a”實際上包含兩個字元:‘a'和‘',而把它賦給一個字元變數是不行的。
4.忽略了“=”與“==”的區別。
在許多高級語言中,用“=”符號作為關系運算符“等於”。如在BASIC程序中可以寫
if (a=3) then …
但C語言中,“=”是賦值運算符,“==”是關系運算符。如:
if (a==3) a=b;
前者是進行比較,a是否和3相等,後者表示如果a和3相等,把b值賦給a。由於習慣問題,初學者往往會犯這樣的錯誤。
5.忘記加分號。
分號是C語句中不可缺少的一部分,語句末尾必須有分號。
a=1
b=2
編譯時,編譯程序在“a=1”後面沒發現分號,就把下一行“b=2”也作為上一行語句的一部分,這就會出現語法錯誤。改錯時,有時在被指出有錯的一行中未發現錯誤,就需要看一下上一行是否漏掉了分號。
{ z=x+y;
者廳豎t=z/100;
printf("%f",t);}
對於復合語句來說,最後一個語句中最後的分號不能忽略不寫。
6.多加分號。
對於一個復合語句,如:
{ z=x+y;
t=z/100;
printf("%f",t);
};
復合語首大句的花括弧後不應再加分號,否則將會畫蛇添足。
又如:
if (a%3==0);
I++;
本是如果3整除a,則I加1。但由於if (a%3==0)後多加了分號,則if語句到此結束,程序將執行I++語句,不論3是否整除a,I都將自動加1。
再如:
for (I=0;I<5;I++);
{scanf("%d",&x);
printf("%d",x);}
本意是先後輸入5個數,每輸入一個數後再將它輸出。由於for()後多加了一個分號,使循環體變為空語句,此時只能輸入一個數並輸出它。
7.輸入變數時忘記加地址運算符“&”。
int a,b;
scanf("%d%d",a,b);
這是不合法的。Scanf函數的作用是:按照a、b在內存的地址將a、b的值存進去。“&a”指a在內存中的地址。
8.輸入數據的方式與要求不符。
①scanf("%d%d",&a,&b);
輸入時,不能用逗號作兩個數據間的分隔符,如下面輸入不合法:
3,4
輸入數據時,在兩個數據之間以一個或多個空格間隔,也可用回車鍵,跳格鍵tab。
②scanf("%d,%d",&a,&b);
C規定:如果在“格式控制”字元串中除了格式說明以外還有其它字元,則在輸入數據時應輸入與這些字元相同的字元。下面輸入是合法的:
3,4
此時不用逗號而用空格或其它字元是不對的。
3 4 3:4
又如:
scanf("a=%d,b=%d",&a,&b);
輸入應如以下形式:
a=3,b=4
9.輸入字元的格式與要求不一致。
在用“%c”格式輸入字元時,“空格字元”和“轉義字元”都作為有效字元輸入。
scanf("%c%c%c",&c1,&c2,&c3);
如輸入a b c
字元“a”送給c1,字元“ ”送給c2,字元“b”送給c3,因為%c只要求讀入一個字元,後面不需要用空格作為兩個字元的間隔。
10.輸入輸出的'數據類型與所用格式說明符不一致。
例如,a已定義為整型,b定義為實型
a=3;b=4.5;
printf("%f%d ",a,b);
編譯時不給出出錯信息,但運行結果將與原意不符。這種錯誤尤其需要注意。
11.輸入數據時,企圖規定精度。
scanf("%7.2f",&a);
這樣做是不合法的,輸入數據時不能規定精度。
12.switch語句中漏寫break語句。
例如:根據考試成績的等級列印出百分制數段。
switch(grade)
{ case 'A':printf("85~100 ");
case 'B':printf("70~84 ");
case 'C':printf("60~69 ");
case 'D':printf("<60 ");
default:printf("error ");
由於漏寫了break語句,case只起標號的作用,而不起判斷作用。因此,當grade值為A時,printf函數在執行完第一個語句後接著執行第二、三、四、五個printf函數語句。正確寫法應在每個分支後再加上“break;”。
例如
case 'A':printf("85~100 ");break;
13..在定義數組時,將定義的“元素個數”誤認為是可使的最大下標值。
main()
{static int a[10]={1,2,3,4,5,6,7,8,9,10};
printf("%d",a[10]);
}
C語言規定:定義時用a[10],表示a數組有10個元素。其下標值由0開始,所以數組元素a[10]是不存在的。
16.在不應加地址運算符&的位置加了地址運算符。
scanf("%s",&str);
C語言編譯系統對數組名的處理是:數組名代表該數組的起始地址,且scanf函數中的輸入項是字元數組名,不必要再加地址符&。應改為:
scanf("%s",str);
;