第一篇:c語言常見錯誤
1.= 不等于 ==
從 Algol 派生出來的語言,如 Pascal 和 Ada,用 := 表示賦值而用 = 表示比較。而 C 語言則是用 = 表示賦值而用 == 表示比較。這是因為賦值的頻率要高于比較,因此為其分配更短的符號。此外,C 可以多重賦值(如 a = b = c),并且可以將賦值嵌入到一個大的表達式或者語句中。這種便捷導致了一個潛在的問題:需要用比較的地方卻寫成了賦值。下面的語句看起來好像是要檢查 x 是否等于 y :
if(x = y)
foo();
而實際上是將 y 的值賦值給 x,并檢查結果是否非零。再看看下面的一個希望跳過空格、制表符和換行符的循環:
while(c == ’ ’ || c = ’t’ || c == ’n’)
c = getc(f);
在應該與 ’t’ 進行比較的地方程序員錯誤地使用了 =,而不是==。這個“比較”實際上是將’t’ 賦給 c,然后判斷 c 的(新的)值是否為零。因為 ’t’ 不為零,所以這個“比較”一直為真,因此這是一個死循環。
一些編譯器會對形如 e1 = e2 的條件給出一個警告以提醒用戶。當你確實需要對一個變量進行賦值,然后再檢查變量是否“非零”時,為了避免這種警告信息,應顯式給出比較符。也就是將:
if(x = y)
foo();改寫為:
if((x = y)!= 0)
foo();
2.多字符符號
一些 C 符號,如 /、* 或 =,只有一個字符。還有些 C 符號,如 /*、== 或標識符,具有多個字符。當編譯器遇到緊連在一起的 / 和 * 時,它必須決定是將這兩個字符識別為兩個符號還是一個單獨的符號。C 語言標準規定:“如果一個字符被識別為符號,則應該包含下一個字符看看包含此字符后構成的字符串是否仍然可以構成符號,如果可以則繼續包含下一個字符,一直到不能構成符號為止。”。因此,如果 / 是符號的第一個字符,并且 / 后面緊隨著一個 *,則這兩個字符構成注釋符開始標記。下面的語句看起來像是將 y 的值設置為 x 的值除以 p 所指向的值:
y = x/*p
/* p 指向除數 */;
實際上,因為 /* 是注釋符開始標記,因此編譯器會簡單地“吞噬”程序文本,直到 */ 出現為止。換句話說,這條語句僅僅把 y 的值設置為 x 的值,而根本沒有看到 p。我們應該將這條語句改為:
y = x / *p
/* p 指向除數 */;或者:
y = x /(*p)
/* p指向除數 */;
3.else 問題
考慮下面的程序片斷:
if(x == 0)
if(y == 0)
error();
else {
z = x
y;
f(&z);
}
寫這段程序的程序員的目的明顯是想將情況分為兩種:x == 0 和x!= 0。在第一種情況中,如果 y == 0,則調用 error()。第二種情況中,程序執行 z = x
y;和 f(&z)。
然而,這段程序的實際效果卻大為不同。其原因是 else 總是與離它最近的 if 相關聯。上面那段代碼其實等價于:
if(x == 0){
if(y == 0)
error();
else {
z = x
y;
f(&z);
}
}
也就是說,當 x!= 0 發生時什么也不做。如果要達到我們想要的效果,應該改成:
if(x == 0){
if(y == 0)
error();
} else {
z = z
y;
f(&z);
}
4.表達式求值順序
一些運算符以一種已知的、特定的順序對其操作數進行求值。但另一些則不是。例如下面的表達式:
a
5.&&、|| 和!運算符
C 規定 0 代表“假”,非零代表“真”。這些運算符返回 1 表示“真”而返回 0 表示“假”。&& 和 || 運算符如果可以通過左邊的操作數確定整個表達式的真假性,就不會對右邊的操作數進行求值。!10 返回 0,因為 10 非零;10 && 12 返回 1,因為 10 和 12 的值都不是 0;10 || 12 也是 1,因為 10 非零。這個表達式中的 12 不會被求值,因為左邊的 10 就足夠確定整個表達式為真。同理 :10 || f()中的 f()也不會被求值。
6.下標從零開始
C 語言中,一個具有 n 個元素的數組中沒有下標為 n 的元素,元素的下標是從 0 到n-1。下面的程序可能會崩潰:
int i, a[10];
for(i = 1;i
7.getchar 函數的返回值為整型(int)
請看以下程序:
#include
int main(void)
{
char c;
while((c = getchar())!= EOF)
putchar(c);
return 0;
}
這段代碼存在一個小小的,但已經足以致命的錯誤:c 被聲明為字符型(char)而不是整型。這意味著 c 可能不能正確接收 EOF,從而導致程序不能退出!正確的寫法是:將 char 改成int。
第二篇: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=1 b=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
此時不用逗號而用空格或其它字符是不對的。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%dn”,a,b);
編譯時不給出出錯信息,但運行結果將與原意不符。這種錯誤尤其需要注重。
11.輸入數據時,企圖規定精度。
scanf(“%7.2f”,&a);
這樣做是不合法的,輸入數據時不能規定精度。
12.switch語句中漏寫break語句。
例如:根據考試成績的等級打印出百分制數段。
switch(grade)
{ case 'A':printf(“85~100n”);case 'B':printf(“70~84n”);case 'C':printf(“60~69n”);case 'D':printf(“<60n”);default:printf(“errorn”);
由于漏寫了break語句,case只起標號的作用,而不起判定作用。因此,當grade值為A時,printf函數在執行完第一個語句后接著執行第二、三、四、五個printf函數語句。正確寫法應在每個分支后再加上“break;”。例如
case 'A':printf(“85~100n”);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.在定義數組時,將定義的“元素個數”誤認為是可使的最大下標值。
m ain()
{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);}
附錄:出錯信息解釋
Ambiguous operators need parentheses 不明確的運算需要用括號括起
Ambiguous symbol 'xxx' 不明確的符號
Argument list syntax error 參數表語法錯誤
Array bounds missing 丟失數組界限符
Array size toolarge 數組尺寸太大
Bad character in paramenters 參數中有不適當的字符
Bad file name format in include directive 包含命令中文件名格式不正確
Bad ifdef directive synatax 編譯預處理ifdef有語法錯
Bad undef directive syntax 編譯預處理undef有語法錯
Bit field too large 位字段太長
Call of non-function 調用未定義的函數
Call to function with no prototype 調用函數時沒有函數的說明
Cannot modify a const object 不允許修改常量對象
Case outside of switch 漏掉了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)函數調用缺少右括號
Fuction definition out of place 函數定義位置錯誤
Fuction 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 floating point 非法的浮點運算
Illegal use of pointer 指針使用非法
Improper use of a typedefsymbol 類型定義符號使用不恰當
In-line assembly not allowed 不允許使用行間匯編
Incompatible storage class 存儲類別不相容
Incompatible type conversion 不相容的類型轉換
Incorrect number format 錯誤的數據格式
Incorrect use of default Default使用不當
Invalid indirection 無效的間接運算
Invalid pointer addition 指針相加無效
Irreducible expression tree 無法執行的表達式運算
Lvalue 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 賦值可能不正確
Redeclaration of 'xxx' 重復定義了xxx
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 結構體尺寸太大
Sub scripting missing ] 下標缺少右方括號
Superfluous & with function or array 函數或數組中有多余的“&” Suspicious pointer conversion 可疑的指針轉換
Symbol limit exceeded 符號超限
Too few parameters in call
函數調用時的實參少于函數的參數不
Too many default cases
Default太多(switch語句中一個)Too many error or warning messages 錯誤或警告信息太多
Too many type in declaration 說明中類型太多
Too much auto memory in function 函數用到的局部存儲太多
Too much global data defined in file 文件中全局數據太多
Two 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 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 assemble 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 of 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 結構體的長度為零
第三篇:C語言常見錯誤小結
C語言常見錯誤小結-C/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=1 b=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%dn ”,a,b);編譯時不給出出錯信息,但運行結果將與原意不符。這種錯誤尤其需要注意。
11.輸入數據時,企圖規定精度。scanf(“%7.2f ”,&a);這樣做是不合法的,輸入數據時不能規定精度。
12.switch語句中漏寫break語句。
例如:根據考試成績的等級打印出百分制數段。switch(grade){ case 'A ':printf(“85~100n ”);case 'B ':printf(“70~84n ”);case 'C ':printf(“60~69n ”);case 'D ':printf(“ <60n ”);default:printf(“errorn ”);由于漏寫了break語句,case只起標號的作用,而不起判斷作用。因此,當grade值為A時,printf函數在執行完第一個語句后接著執行第二、三、四、五個printf函數語句。正確寫 法應在每個分支后再加上“break;”。例如
case 'A ':printf(“85~100n ”);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.在不應加地址運算符&的位置加了地址運算符。scanf(“%s ”,&str);C語言編譯系統對數組名的處理是:數組名代表該數組的起始地址,且scanf函數中的輸入 項是字符數組名,不必要再加地址符&。應改為:scanf(“%s ”,str);
17.同時定義了形參和函數中的局部變量。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);}
第四篇:個人簡歷常見錯誤
必讀:6個簡歷里常見的錯誤
從頭到尾我也做過一些招聘工作,從簡歷篩選、通知面試、面試都在進行。發現很多人在簡歷中犯了不少錯誤,也許對于求職者來說是很小的問題,但是其實往往決定了一個機會的得失,覺得有必要整理出來,給大家一個提醒。
1、簡歷上的電話停機或者關機狀態
這個問題一說出來,可能大家會覺得很可笑,怎么可能是一個重要問題。我也很驚訝,就我們統計的結果來看,篩選出的簡歷,大約有20%是由于電話停關機的問題沒辦法通知到的。我總結一個原因是不少異地求職的人員到當地求職后,發送簡歷的時候忘記把已經更換的號碼在簡歷上更新了;另一個是很多人使用的神州行、動感地帶的號碼需要充值,但是覺得晚
一、兩天沒事;殊不知,每天求職的簡歷成百上千,通知面試的人不可能天天跟蹤你的電話開通情況的。即使暫時不方便接聽電話,也建議可申請秘書臺服務,不漏掉一個可能的機會。注意更新自己的簡歷聯系方式,保證自己能隨時被找到,讓自己處在隨時啟動的狀態,會比其他人得到更多的機會。
2、未及時更改、更新簡歷信息
尤其是求職信。往往收到一份簡歷,求職信寫得懇切規范,但是到末尾一看,稱呼的“貴公司”名字原來根本不是我公司,不免大倒冷水,也對求職者的誠意表示懷疑。另外就是不少人,求職信里頭一句還寫著“我是一個剛走出校門的學生?..”看到簡歷里,原來已經工作1-2年了。發出一份簡歷是通過考慮,慎重地,但是這樣的簡歷,很難讓人相信,不是隨手的游戲。
3、羅列全部實習經歷
這在畢業生的簡歷里經常發現。為了提高自己的命中率,不少畢業生會在工作經驗那欄把自己所有的實習經歷寫出來。粗看簡歷,覺得有很多工作經驗,但是仔細一看,就會發現很亂,各個經歷之間是毫無關聯和邏輯的,家教、促銷、網絡管理等等。其實就畢業生來說,沒有實際的工作經驗是客觀事實,用人單位不會因為你羅列了很多短期實踐就給你面試機會,更看重的是你是否有能給自己加分的思想和與眾不同的潛力。羅列經歷,只能讓自己的簡歷看上去很雜亂。
4、大量、多次投遞崗位
一般的求職成功經驗是多撒網,多投遞簡歷,反正在網絡上多次投遞的邊際成本為0。但是這個多撒網,指的是有的放矢地投遞,而非毫無目的。統計中,大約有35%的簡歷是盲目投遞的,有的簡歷根本不完整,只寫了姓名和電話,正文部分完全是空白;有的軟件專業畢業,把所有的硬件崗位都申請了;有的多次被拒后,仍每天投遞;還有的幾乎投遞了公司所有的招聘崗位。如此瘋狂、不成熟的投遞方式,并不能帶來高的命中率,不了解自己,不了解職位的要求,很難讓用人單位相信你的符合度和穩定性。真正命中率高的,往往是成熟的求職者:對招聘要求做了仔細的揣摩,根據自身條件和崗位符合度投遞簡歷,并為面試做了認真準備。
5、簡歷條理不清晰
一般的簡歷模版,都會分工作經驗和學習經歷兩部分,為了突出簡歷,一些求職者會創造新的模版或者按照自己的思路填寫簡歷,但是簡歷篩選人每天在查閱大量的簡歷,遇到標新立異的簡歷往往很頭痛,因為不是按常規的條理來寫的,很難從中找到需要的信息,尤其3頁以上的簡歷,更需要有非常清楚的條理。或者就是發現了合適的簡歷,但是因為模版問題,聯系方式總要到處去找。其實建議大家就用網站推薦的模版比較好,清楚規范,便于理解。
6、愛用附件簡歷
為了省事,一些人喜歡使用附件簡歷,直接發送到公布的郵箱。但是現在電腦病毒越來越多,很多求職者是在網吧里發送簡歷的,各個用人單位,尤其是大公司的郵箱,防備特別嚴格,附件發送過來的簡歷,十有五、六是亂碼。打不開,也無法一一直接回復各個求職者的心情,是很難受的。
常有人在論壇上問我,為什么投遞了那么多簡歷,都沒有回音?但是也有人跟帖,自己投遞的命中率是很高的。沒有回音的原因可能有很多,但是我建議,那些苦苦等待回音的人們,打開自己的簡歷,看看是否有以上問題?(完)
第五篇:論文常見格式錯誤
各位指導老師:
首先,對大家在畢業設計中付出的勞動表示衷心的感謝!大家辛苦了!
在近幾年的畢業設計中出現了一些問題,在此進行部分匯總,供大家參考,有則改之,無則加勉!
1、請各位老師在以后的畢設中務必認真負責的進行指導,了解學生在畢設中具體做了哪些工作,并據此給出指導教師分數,避免指導教師評分全部都是高分的情況,盡量按照優秀15%、良好45%、中等30%、及格10%的比例進行打分。務必請以后指導畢設的老師認真負責的進行論文的指導,再次表示衷心的感謝!
2、論文中的字體要求:正文中文為宋體、英文和數字(含標題和圖表)使用Times New Roman字體。設置方法:選中全文,設置字體中文為宋體,西文字體為Times New Roman即可;
3、論文中的所有標點符號(特殊要求除外)應使用中文全角,如逗號為“,”,而不是“,”;
4、論文中不能存在大塊空白,如圖片在該頁占不下,應補充前面內容(多說點話)填充空白,或將圖片后方文字挪到空白處(最好不采用此種方式);
5、所有圖片應使用Visio軟件/AutoCAD/Protell等軟件由學生自己畫,圖中涉及到的文字使用10磅大小,在將圖片插入正文中時,不能改變圖片大小,否則圖中文字大小將改變;
6、圖/表內文字應與圖/表格協調,不能出現框大字小的情況;
7、在出現圖/表之前,應在該圖/表之前的正文部分出現對該圖/表的引用,如“見圖1-1所示。”,并使用“,”或“。”結束,而不能使用“:”。
8、論文封皮班級處應填寫:2009級1班/2009級2班/2011級專接本1班;
9、摘要部分應寫該論文主要做了哪些內容,如何做的,不能寫與論文設計過程無關的介紹性內容,字數要求300-500字;
10、英文摘要和外文翻譯要嚴格把關,不能出現嚴重錯誤;
11、論文內容應重點描述該設計是如何實現的,對使用到的元器件、軟件等的介紹性內容應壓縮到1-2頁之內;
12、另外一些格式問題請參看《物理系、電氣信息工程系論文撰寫規范》,如總結、參考文獻部分的格式、中英文摘要部分的格式等;
以上列出了在答辯過程中出現的一些普遍問題,請各位指導教師認真核對自己學生的論文,是否存在以上問題,如有,請督促學生認真修改,修改完成后請收集學生的論文一份,并收繳電子版保存。
學生論文在后續工作中都要進行統一裝訂打印,因此請嚴格控制學生論文質量,如在裝訂打印前發現論文存在質量問題,則由指導教師親自進行修改。
再次對老師的認真負責、辛勤工作表示衷心的感謝!