第一篇:領(lǐng)導(dǎo)向下溝通中的常見語言錯(cuò)誤
領(lǐng)導(dǎo)向下溝通中的常見語言錯(cuò)誤
用戶: 一片田
專業(yè)度: 19164 時(shí)間: 2008-11-25 上午8:55
有效的溝通是不斷跨越障礙的過程。上下級溝通的障礙來自哪里?來自于溝通的一方或雙方的錯(cuò)誤的溝通立場,而這種錯(cuò)誤的溝通立場又通過錯(cuò)誤的溝通語言表現(xiàn)出來。
許多研究發(fā)現(xiàn),一些駕輕就熟、脫口而出的語言,成了“殺手”式的語言信息,阻礙了上下級溝通的效果,導(dǎo)致了上下級之間的誤會(huì)和沖突。所以,提高上下級溝通的效果,首先應(yīng)從分析錯(cuò)誤的溝通語言著手。
湯瑪斯。高登和克里斯。科爾等心理學(xué)家曾經(jīng)把錯(cuò)誤或不當(dāng)?shù)臏贤ㄕZ言分為三大類。參照他們的分類,結(jié)合我國企業(yè)中上下級溝通的一些實(shí)際狀況,這里我們把向下溝通中常見的語言錯(cuò)誤劃分為四類:發(fā)號施令型、傲慢無禮型、諷刺挖苦型與隔靴搔癢型。
發(fā)號施令型
發(fā)號施令型語言總是告訴員工:作為一個(gè)員工,他(她)“應(yīng)該”怎么做、“必須”怎么做、“最好”怎么做、“可以”怎么做。
發(fā)號施令型的上級認(rèn)為,通過這樣的語言可以向員工傳遞解決問題的辦法,期望員工最好能無條件地接受。它也是許多上級最喜歡使用的一種語言。
發(fā)號施令型語言可以分為四種,根據(jù)上級使用的頻率排列為:
命令
例如:。這里輪不到你說話,你的任務(wù)就是好好聽我說!。不許辯解,沒有任何借口!。怎么這么羅嗦,按照我說的去做就行了!
這種語言使人感到,員工的感受、需求或問題并不重要,他們必須順從上級的感受與需要,并有可能產(chǎn)生對上級權(quán)威的恐懼感。這是上級單方面發(fā)出的語言信息,員工的情感或需求沒有得到尊重,因此員工有可能對上級產(chǎn)生怨恨、惱怒和敵對的情緒,比如頂撞,抗拒,故意考驗(yàn)上級決心,發(fā)脾氣等。
威脅
例如:。如果你們這次再完不成指標(biāo),我就要扣你們?nèi)戟?jiǎng)金!。如果你再不改,我就會(huì)匯報(bào)給大老板,叫你死得很難看!
這種語言與命令很相似,只是再加上告訴員工不服從的后果是什么。這種語言可能使員工感到恐懼和屈從,也可能引起員工的敵意。員工有時(shí)還可能對此做出與上級期待的相反反應(yīng):“好啊,不管你說什么,我都不在乎,看你把我怎么樣!”更有甚者,做一做剛才被警告過的事,好看看上級真的是否言出必行。
強(qiáng)加于人
例如:。昨天為什么沒有完成任務(wù)?是不是沒有照我的話去做?你知道如何來安排工作程序嗎?讓我來告訴你?!=裉煺夷銇?,是要與你討論你這次工作失誤的事情。經(jīng)過我對你的分析,我發(fā)現(xiàn)你存在的問題是粗心。你說是嗎?記?。合麓我?xì)心!好,我的話講完了,你可以回去了!千萬要記住我的話,別再粗心!
其實(shí),這個(gè)員工工作失誤未必是因?yàn)榇中模苍S還有更多的原因。上級找這個(gè)員工來談話,目的是為了幫助他找到這次失誤的原因,提高工作效率,但因?yàn)闆]互動(dòng)和交流,導(dǎo)致了他們之間的談話毫無效果,并讓員工感到上級并不想、也確實(shí)不了解自己。
“強(qiáng)加于人”實(shí)際上也是微妙地下命令,但是它可以更巧妙地隱藏在貌似很有禮貌的、富于邏輯的陳述中,但講話的這一方只有一種心態(tài):“你是我的員工,所以必須按照我的觀點(diǎn)來做?!?/p>
因?yàn)椴唤o對方發(fā)表自己意見的機(jī)會(huì),因而這類談話進(jìn)行得很快,員工也根本沒有時(shí)間表達(dá)自己的想法,從而會(huì)感到自己的權(quán)利被剝奪。長此以往,員工還會(huì)產(chǎn)生一種“上級總是認(rèn)為我不行,有改也改不完的許多缺點(diǎn)”等壓抑感。
過度忠告
例如:。如果我是你,肯定不會(huì)像你這么做。以后給我記住:一定要先找本地的給客戶,再找外地的給客戶。
這樣的語言信息是在向員工證明:上級不信賴他們自身解決問題的能力。其后果往往會(huì)使員工對上級產(chǎn)生依賴心理,削弱他們獨(dú)立判斷的能力和創(chuàng)造力。
過度忠告也意味著上級的一種自我優(yōu)越感,容易引起追求獨(dú)立的員工的反感。
有時(shí)這種語言信息還會(huì)使員工感到被誤解,甚至這樣想:“如果你真正了解我,就不會(huì)給我出這種又餿又笨的主意,說不定外地的是個(gè)大客戶呢?!?/p>
發(fā)號施令型語言是上級平時(shí)使用得最多的一種語言。許多上級認(rèn)為它是見效最快的語言。它的優(yōu)點(diǎn)是上級可以快速解決員工存在的一些問題,而缺點(diǎn)是使用過度就會(huì)失效。根本原因在于:第一,容易造成員工反感。這種語言的后面常常隱藏著這樣的意思:“你太笨了 ”,“你太差勁了”,“你要聽我的”,“我是權(quán)威”等等。這讓員工聽后很反感,隨之出現(xiàn)逆反心理或頂撞情緒。有經(jīng)驗(yàn)的上級會(huì)發(fā)現(xiàn),當(dāng)一個(gè)員工接受這樣的語言時(shí)間較長后,會(huì)變得煩躁、自卑,或?qū)σ院箢愃频恼Z言漠然,以至于有許多上級和家長總是抱怨:“為什么孩子越被教育卻越不聽話?”
第二,容易使員工順從,卻不容易產(chǎn)生積極的行為。
第三,它所表達(dá)的信息僅涉及員工而不涉及上級本身。由于員工不知道他的行為對上級有什么影響,只知道上級要求他對某些行為進(jìn)行改變。在這種單方面的溝通渠道中,員工也會(huì)單方面地對上級作不正確的推測,比如:“這位上級偏心,心胸狹隘,脾氣壞,專門拿我們出氣,對我們要求太高”,等等。員工有了這樣的負(fù)面心態(tài),就不會(huì)從正面來接受上級原本良好的用意了。
傲慢無禮型
傲慢無禮型語言可以分為三種:
訓(xùn)誡
例如:。你是個(gè)學(xué)會(huì)計(jì)學(xué)的大學(xué)畢業(yè)生啊,應(yīng)該知道報(bào)表上這些數(shù)字代表什么?否則你得到學(xué)校里去回爐了!。你應(yīng)該很清楚,在上級面前應(yīng)該怎樣說話!
這種語言表達(dá)了一種預(yù)先設(shè)定好的立場,使員工感受到與上級之間地位的不平等,感受到上級在運(yùn)用上級權(quán)威,導(dǎo)致員工容易對上級產(chǎn)生防衛(wèi)心理。
當(dāng)上級運(yùn)用這種語言模式的時(shí)候,常會(huì)使用這些短語:“你應(yīng)該”;“如果你聽從我的勸告,你就會(huì)”;“你必須”等。
這類語言在向員工表達(dá):上級不信任你們的判斷能力,你們最好接受別人所認(rèn)為的正確判斷。對于越資深的員工,“應(yīng)該和必須”式的語言越容易引起抗拒心理,并導(dǎo)致他們產(chǎn)生更強(qiáng)烈地維護(hù)自己的立場。
標(biāo)記
例如:。我發(fā)現(xiàn)公司里一有麻煩,總有你的份!。我早就知道你不行!因?yàn)槟闾珣卸?。我看你永遠(yuǎn)改不好了!
這種語言一下就把員工打入了“另類”,最容易令員工產(chǎn)生自卑感或“破罐子破摔”式的消極心態(tài)。
面對上級這樣的標(biāo)記語言,員工會(huì)感到自尊心受到了損害。為了維護(hù)自己的形象,他們以后就會(huì)在上級面前盡量掩飾自己的想法和情感,不愿將內(nèi)心世界向上級打開。
一些調(diào)查表明:公司中最得不到員工尊重的上級是經(jīng)常給員工打標(biāo)記的上級。所以,上級對此必須特別注意。
揭露
例如:。你這樣對抗上級無非是為了出風(fēng)頭!。你心里想什么我還不知道,在我面前你別想玩什么花招!。說幾句認(rèn)錯(cuò)的話就想蒙混過關(guān)?其實(shí)是害怕我在會(huì)議上公開批評你吧?可我今天偏要公開批評你!
其實(shí),上級讓員工知道“我知道為什么”、“我能看穿你”并不是件好事。因?yàn)槿绻霞壏治稣_,員工會(huì)由于被揭穿而感到窘迫或氣惱。而如果上級分析不正確,員工也會(huì)由于受到誣賴而感到憤怒。他們常常認(rèn)為上級是在自作聰明,自以為能像上帝一樣居高臨下地洞察所有員工的內(nèi)心,感覺莫名其妙地好。
傲慢無禮型語言在不同程度上都有明顯貶損員工的意味。它們會(huì)打擊員工的自尊心,貶低員工的人格,并明確地表達(dá)下列意思:“你是問題員工”;“你不好”;“我不喜歡你、甚至討厭你”;“我對你沒有信心”等等。
員工如果經(jīng)常聽到這類語言,就有可能形成“我是一個(gè)差勁的人”等自卑心理,長此以往會(huì)對員工的身心發(fā)展造成較大的傷害。
由于這種語言常常使員工的自尊心受到傷害,他們也可能隨之出現(xiàn)反攻擊的心態(tài)。這時(shí),上下級之間可能出現(xiàn)大的沖突。
更重要的是,傲慢無禮型語言給上級的形象蒙上了粗魯、教養(yǎng)差等陰影,給員工造成負(fù)面影響,對他們的成長十分不利。
諷刺挖苦型
諷刺挖苦型語言可以分為兩種:
暗示
例如:。你講話的水平真高啊,看來以后我的位置該讓給你了吧。臨近年底了才完成60%的任務(wù),你還不著急,真是胸有成竹啊,看來名牌大學(xué)畢業(yè)的高人真是能力強(qiáng)啊。這類語言雖然相對說來比較溫和,但效果往往很差。
原因之一:由于員工年輕、注意力不夠集中或認(rèn)為不關(guān)自己的事等,大多數(shù)人并不能夠透徹地理解這些暗示,所以有時(shí)上級會(huì)感到自己是在“對牛彈琴”。
原因之二:哪怕有些員工明白了上級話語的部分含義,也會(huì)覺得上級說話如此拐彎抹角而有失坦誠,覺得上級“太做作了”,從而失去了對上級的信任。
原因之三:即使員工聽出了上級的“話中之話”,也只會(huì)對上級的說話動(dòng)機(jī)和人品做出鄙夷性的評價(jià)。
中傷
例如:。你的報(bào)告寫得太好了,我的水平太差,實(shí)在看不懂!。你以為你是比爾。蓋茲嗎?不要自以為懂得很多了!
這類話語一出口,就流露出對員工的明顯鄙視,還帶有有一些人格侮辱的成分在內(nèi)。
對這類中傷性的語言,員工會(huì)非常反感。他們即使當(dāng)面不敢說,心里卻會(huì)反擊:“你有什么資格來消遣我??茨阏f話的樣子,哪像個(gè)上級!”
上級在使用諷刺挖苦型語言的時(shí)候,是希望員工聽懂這些話中的弦外之音。他們認(rèn)為這是一種較為溫和、較為“高雅”的表達(dá)方式。這類語言的潛臺(tái)詞是:“如果我們把話挑明你們就會(huì)不喜歡我”,“跟你們坦白太危險(xiǎn)了”,“我是有水平的上級,不會(huì)像你們這群傻瓜那樣直筒子式地說話”。
不要以為僅僅是發(fā)號施令型和傲慢無禮型語言才有許多不良的后果,諷刺挖苦型語言對員工的傷害也非常大。因?yàn)檫@類語言的深處隱藏著的是對員工的厭惡和輕視。
隔靴搔癢型
隔靴搔癢型語言主要有兩種:
空口“安慰”
例如:。不要難過!太陽每天都是新的,明天你就會(huì)好起來。不要著急,你還年輕,人生之路長著呢?;厝バ菹⑿菹ⅲ魈煲磺卸紩?huì)好起來。
在這些并不能解決實(shí)際問題的、沒有意義的安慰中,隱含著一絲“哀其不幸”式的憐憫感。因此,員工會(huì)感到雙方并沒有站在平等的地位對話,而自尊心越強(qiáng)的員工越不喜歡上級這樣的講話方式。
泛泛之辭
例如:??偟目磥?,你基本上還算是一個(gè)合格的員工。我也不知道對你說什么好,你自己好自為之吧。你需要發(fā)揚(yáng)優(yōu)點(diǎn),改正缺點(diǎn)。
這種泛泛而論的評價(jià)過于簡單,對于員工的成長根本無益。而員工也會(huì)懷疑上級是否真正關(guān)心自己。當(dāng)上級安慰一個(gè)痛苦中的員工、或員工急切地要求上級對自己有所幫助時(shí),隔靴搔癢式的語言會(huì)讓員工非常失望。進(jìn)而他們就會(huì)對上級產(chǎn)生無能、自私、冷漠等不良印象。如果員工經(jīng)常聽到上級說此類話,還會(huì)懷疑上級是否一直在敷衍自己,對自己毫無愛心。長此以往,上下級關(guān)系就不會(huì)融洽,隔閡日益加深。
許多員工在回憶自己的職業(yè)生涯時(shí),經(jīng)常會(huì)提及若干印象最深刻的事情。他們也許會(huì)說,當(dāng)時(shí)是上級一次意味雋永的激勵(lì)使自己受益一生;但也許會(huì)說,當(dāng)時(shí)是上級的一句話深深地傷害了自己,成了自己“永遠(yuǎn)傷心的理由”。上級不能輕視自己的一言一行,不能在無意中成為溝通的“殺手”。建設(shè)和諧的企業(yè)文化,需要從認(rèn)真對待每一句話、每一次溝通開始。
第二篇:c語言常見錯(cuò)誤
1.= 不等于 ==
從 Algol 派生出來的語言,如 Pascal 和 Ada,用 := 表示賦值而用 = 表示比較。而 C 語言則是用 = 表示賦值而用 == 表示比較。這是因?yàn)橘x值的頻率要高于比較,因此為其分配更短的符號。此外,C 可以多重賦值(如 a = b = c),并且可以將賦值嵌入到一個(gè)大的表達(dá)式或者語句中。這種便捷導(dǎo)致了一個(gè)潛在的問題:需要用比較的地方卻寫成了賦值。下面的語句看起來好像是要檢查 x 是否等于 y :
if(x = y)
foo();
而實(shí)際上是將 y 的值賦值給 x,并檢查結(jié)果是否非零。再看看下面的一個(gè)希望跳過空格、制表符和換行符的循環(huán):
while(c == ’ ’ || c = ’t’ || c == ’n’)
c = getc(f);
在應(yīng)該與 ’t’ 進(jìn)行比較的地方程序員錯(cuò)誤地使用了 =,而不是==。這個(gè)“比較”實(shí)際上是將’t’ 賦給 c,然后判斷 c 的(新的)值是否為零。因?yàn)?’t’ 不為零,所以這個(gè)“比較”一直為真,因此這是一個(gè)死循環(huán)。
一些編譯器會(huì)對形如 e1 = e2 的條件給出一個(gè)警告以提醒用戶。當(dāng)你確實(shí)需要對一個(gè)變量進(jìn)行賦值,然后再檢查變量是否“非零”時(shí),為了避免這種警告信息,應(yīng)顯式給出比較符。也就是將:
if(x = y)
foo();改寫為:
if((x = y)!= 0)
foo();
2.多字符符號
一些 C 符號,如 /、* 或 =,只有一個(gè)字符。還有些 C 符號,如 /*、== 或標(biāo)識符,具有多個(gè)字符。當(dāng)編譯器遇到緊連在一起的 / 和 * 時(shí),它必須決定是將這兩個(gè)字符識別為兩個(gè)符號還是一個(gè)單獨(dú)的符號。C 語言標(biāo)準(zhǔn)規(guī)定:“如果一個(gè)字符被識別為符號,則應(yīng)該包含下一個(gè)字符看看包含此字符后構(gòu)成的字符串是否仍然可以構(gòu)成符號,如果可以則繼續(xù)包含下一個(gè)字符,一直到不能構(gòu)成符號為止?!薄R虼?,如果 / 是符號的第一個(gè)字符,并且 / 后面緊隨著一個(gè) *,則這兩個(gè)字符構(gòu)成注釋符開始標(biāo)記。下面的語句看起來像是將 y 的值設(shè)置為 x 的值除以 p 所指向的值:
y = x/*p
/* p 指向除數(shù) */;
實(shí)際上,因?yàn)?/* 是注釋符開始標(biāo)記,因此編譯器會(huì)簡單地“吞噬”程序文本,直到 */ 出現(xiàn)為止。換句話說,這條語句僅僅把 y 的值設(shè)置為 x 的值,而根本沒有看到 p。我們應(yīng)該將這條語句改為:
y = x / *p
/* p 指向除數(shù) */;或者:
y = x /(*p)
/* p指向除數(shù) */;
3.else 問題
考慮下面的程序片斷:
if(x == 0)
if(y == 0)
error();
else {
z = x
y;
f(&z);
}
寫這段程序的程序員的目的明顯是想將情況分為兩種:x == 0 和x!= 0。在第一種情況中,如果 y == 0,則調(diào)用 error()。第二種情況中,程序執(zhí)行 z = x
y;和 f(&z)。
然而,這段程序的實(shí)際效果卻大為不同。其原因是 else 總是與離它最近的 if 相關(guān)聯(lián)。上面那段代碼其實(shí)等價(jià)于:
if(x == 0){
if(y == 0)
error();
else {
z = x
y;
f(&z);
}
}
也就是說,當(dāng) x!= 0 發(fā)生時(shí)什么也不做。如果要達(dá)到我們想要的效果,應(yīng)該改成:
if(x == 0){
if(y == 0)
error();
} else {
z = z
y;
f(&z);
}
4.表達(dá)式求值順序
一些運(yùn)算符以一種已知的、特定的順序?qū)ζ洳僮鲾?shù)進(jìn)行求值。但另一些則不是。例如下面的表達(dá)式:
a
5.&&、|| 和!運(yùn)算符
C 規(guī)定 0 代表“假”,非零代表“真”。這些運(yùn)算符返回 1 表示“真”而返回 0 表示“假”。&& 和 || 運(yùn)算符如果可以通過左邊的操作數(shù)確定整個(gè)表達(dá)式的真假性,就不會(huì)對右邊的操作數(shù)進(jìn)行求值。!10 返回 0,因?yàn)?10 非零;10 && 12 返回 1,因?yàn)?10 和 12 的值都不是 0;10 || 12 也是 1,因?yàn)?10 非零。這個(gè)表達(dá)式中的 12 不會(huì)被求值,因?yàn)樽筮叺?10 就足夠確定整個(gè)表達(dá)式為真。同理 :10 || f()中的 f()也不會(huì)被求值。
6.下標(biāo)從零開始
C 語言中,一個(gè)具有 n 個(gè)元素的數(shù)組中沒有下標(biāo)為 n 的元素,元素的下標(biāo)是從 0 到n-1。下面的程序可能會(huì)崩潰:
int i, a[10];
for(i = 1;i
7.getchar 函數(shù)的返回值為整型(int)
請看以下程序:
#include
int main(void)
{
char c;
while((c = getchar())!= EOF)
putchar(c);
return 0;
}
這段代碼存在一個(gè)小小的,但已經(jīng)足以致命的錯(cuò)誤:c 被聲明為字符型(char)而不是整型。這意味著 c 可能不能正確接收 EOF,從而導(dǎo)致程序不能退出!正確的寫法是:將 char 改成int。
第三篇:C語言常見錯(cuò)誤小結(jié)(定稿)
c語言的最大特點(diǎn)是:功能強(qiáng)、使用方便靈活。C編譯的程序?qū)φZ法檢查并不象其它高級語言那么嚴(yán)格,這就給編程人員留下“靈活的余地”,但還是由于這個(gè)靈活給程序的調(diào)試帶來了許多不便,尤其對初學(xué)C語言的人來說,經(jīng)常會(huì)出一些連自己都不知道錯(cuò)在哪里的錯(cuò)誤。看著有錯(cuò)的程序,不知該如何改起,本人通過對C的學(xué)習(xí),積累了一些C編程時(shí)常犯的錯(cuò)誤,寫給各位學(xué)員以供參考。
1.書寫標(biāo)識符時(shí),忽略了大小寫字母的區(qū)別。
main(){
int a=5;
printf(“%d”,A);}
編譯程序把a(bǔ)和A認(rèn)為是兩個(gè)不同的變量名,而顯示出錯(cuò)信息。C認(rèn)為大寫字母和小寫字母是兩個(gè)不同的字符。習(xí)慣上,符號常量名用大寫,變量名用小寫表示,以增加可讀性。
2.忽略了變量的類型,進(jìn)行了不合法的運(yùn)算。
main(){
float a,b;
printf(“%d”,a%b);}
%是求余運(yùn)算,得到a/b的整余數(shù)。整型變量a和b可以進(jìn)行求余運(yùn)算,而實(shí)型變量則不答應(yīng)進(jìn)行“求余”運(yùn)算。
3.將字符常量與字符串常量混淆。
char c;c=“a”;
在這里就混淆了字符常量與字符串常量,字符常量是由一對單引號括起來的單個(gè)字符,字符串常量是一對雙引號括起來的字符序列。C規(guī)定以“”作字符串結(jié)束標(biāo)志,它是由系統(tǒng)自動(dòng)加上的,所以字符串“a”實(shí)際上包含兩個(gè)字符:‘a(chǎn)'和‘',而把它賦給一個(gè)字符變量是不行的。
4.忽略了“=”與“= =”的區(qū)別。
在許多高級語言中,用“=”符號作為關(guān)系運(yùn)算符“等于”。如在BASIC程序中可以寫
if(a=3)then ?
但C語言中,“=”是賦值運(yùn)算符,“==”是關(guān)系運(yùn)算符。如:
if(a==3)a=b;
前者是進(jìn)行比較,a是否和3相等,后者表示假如a和3相等,把b值賦給a。由于習(xí)慣問題,初學(xué)者往往會(huì)犯這樣的錯(cuò)誤。
5.忘記加分號。
分號是C語句中不可缺少的一部分,語句末尾必須有分號。
a=1 b=2
編譯時(shí),編譯程序在“a=1”后面沒發(fā)現(xiàn)分號,就把下一行“b=2”也作為上一行語句的一部分,這就會(huì)出現(xiàn)語法錯(cuò)誤。改錯(cuò)時(shí),有時(shí)在被指出有錯(cuò)的一行中未發(fā)現(xiàn)錯(cuò)誤,就需要看一下上一行是否漏掉了分號。
{ z=x+y;t=z/100;printf(“%f”,t);}
對于復(fù)合語句來說,最后一個(gè)語句中最后的分號不能忽略不寫(這是和PASCAL不同的)。
6.多加分號。
對于一個(gè)復(fù)合語句,如:
{ z=x+y;t=z/100;
printf(“%f”,t);};
復(fù)合語句的花括號后不應(yīng)再加分號,否則將會(huì)畫蛇添足。
又如:
if(a%3==0);I++;
本是假如3整除a,則I加1。但由于if(a%3==0)后多加了分號,則if語句到此結(jié)束,程序?qū)?zhí)行I++語句,不論3是否整除a,I都將自動(dòng)加1。
再如:
for(I=0;I<5;I++);{scanf(“%d”,&x);printf(“%d”,x);}
本意是先后輸入5個(gè)數(shù),每輸入一個(gè)數(shù)后再將它輸出。由于for()后多加了一個(gè)分號,使循環(huán)體變?yōu)榭照Z句,此時(shí)只能輸入一個(gè)數(shù)并輸出它。
7.輸入變量時(shí)忘記加地址運(yùn)算符“&”。
int a,b;
scanf(“%d%d”,a,b);
這是不合法的。Scanf函數(shù)的作用是:按照a、b在內(nèi)存的地址將a、b的值存進(jìn)去。“&a”指a在內(nèi)存中的地址。
8.輸入數(shù)據(jù)的方式與要求不符。
①scanf(“%d%d”,&a,&b);
輸入時(shí),不能用逗號作兩個(gè)數(shù)據(jù)間的分隔符,如下面輸入不合法:
3,4
輸入數(shù)據(jù)時(shí),在兩個(gè)數(shù)據(jù)之間以一個(gè)或多個(gè)空格間隔,也可用回車鍵,跳格鍵tab。
②scanf(“%d,%d”,&a,&b);
C規(guī)定:假如在“格式控制”字符串中除了格式說明以外還有其它字符,則在輸入數(shù)據(jù)時(shí)應(yīng)輸入與這些字符相同的字符。下面輸入是合法的:
3,4
此時(shí)不用逗號而用空格或其它字符是不對的。4 3:4
又如:
scanf(“a=%d,b=%d”,&a,&b);輸入應(yīng)如以下形式:
a=3,b=4
9.輸入字符的格式與要求不一致。
在用“%c”格式輸入字符時(shí),“空格字符”和“轉(zhuǎn)義字符”都作為有效字符輸入。
scanf(“%c%c%c”,&c1,&c2,&c3);如輸入a b c
字符“a”送給c1,字符“ ”送給c2,字符“b”送給c3,因?yàn)?c只要求讀入一個(gè)字符,后面不需要用空格作為兩個(gè)字符的間隔。
10.輸入輸出的數(shù)據(jù)類型與所用格式說明符不一致。
例如,a已定義為整型,b定義為實(shí)型
a=3;b=4.5;
printf(“%f%dn”,a,b);
編譯時(shí)不給出出錯(cuò)信息,但運(yùn)行結(jié)果將與原意不符。這種錯(cuò)誤尤其需要注重。
11.輸入數(shù)據(jù)時(shí),企圖規(guī)定精度。
scanf(“%7.2f”,&a);
這樣做是不合法的,輸入數(shù)據(jù)時(shí)不能規(guī)定精度。
12.switch語句中漏寫break語句。
例如:根據(jù)考試成績的等級打印出百分制數(shù)段。
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只起標(biāo)號的作用,而不起判定作用。因此,當(dāng)grade值為A時(shí),printf函數(shù)在執(zhí)行完第一個(gè)語句后接著執(zhí)行第二、三、四、五個(gè)printf函數(shù)語句。正確寫法應(yīng)在每個(gè)分支后再加上“break;”。例如
case 'A':printf(“85~100n”);break;
13.忽視了while和do-while語句在細(xì)節(jié)上的區(qū)別。
(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);}
可以看到,當(dāng)輸入I的值小于或等于10時(shí),二者得到的結(jié)果相同。而當(dāng)I>10時(shí),二者結(jié)果就不同了。因?yàn)閣hile循環(huán)是先判定后執(zhí)行,而do-while循環(huán)是先執(zhí)行后判定。對于大于10的數(shù)while循環(huán)一次也不執(zhí)行循環(huán)體,而do-while語句則要執(zhí)行一次循環(huán)體。
14.定義數(shù)組時(shí)誤用變量。
int n;
scanf(“%d”,&n);int a[n];
數(shù)組名后用方括號括起來的是常量表達(dá)式,可以包括常量和符號常量。即C不答應(yīng)對數(shù)組的大小作動(dòng)態(tài)定義。
15.在定義數(shù)組時(shí),將定義的“元素個(gè)數(shù)”誤認(rèn)為是可使的最大下標(biāo)值。
m ain()
{static int a[10]={1,2,3,4,5,6,7,8,9,10};printf(“%d”,a[10]);}
C語言規(guī)定:定義時(shí)用a[10],表示a數(shù)組有10個(gè)元素。其下標(biāo)值由0開始,所以數(shù)組元素a[10]是不存在的。
16.初始化數(shù)組時(shí),未使用靜態(tài)存儲(chǔ)。
int a[3]={0,1,2};
這樣初始化數(shù)組是不對的。C語言規(guī)定只有靜態(tài)存儲(chǔ)(static)數(shù)組和外部存儲(chǔ)(exterm)數(shù)組才能初始化。應(yīng)改為:
static int a[3]={0,1,2};
17.在不應(yīng)加地址運(yùn)算符&的位置加了地址運(yùn)算符。
scanf(“%s”,&str);
C語言編譯系統(tǒng)對數(shù)組名的處理是:數(shù)組名代表該數(shù)組的起始地址,且scanf函數(shù)中的輸入項(xiàng)是字符數(shù)組名,不必要再加地址符&。應(yīng)改為:
scanf(“%s”,str);
18.同時(shí)定義了形參和函數(shù)中的局部變量。
int max(x,y)int x,y,z;{z=x>y?x:y;return(z);}
形參應(yīng)該在函數(shù)體外定義,而局部變量應(yīng)該在函數(shù)體內(nèi)定義。應(yīng)改為:
int max(x,y)int x,y;{int z;
z=x>y?x:y;return(z);}
附錄:出錯(cuò)信息解釋
Ambiguous operators need parentheses 不明確的運(yùn)算需要用括號括起
Ambiguous symbol 'xxx' 不明確的符號
Argument list syntax error 參數(shù)表語法錯(cuò)誤
Array bounds missing 丟失數(shù)組界限符
Array size toolarge 數(shù)組尺寸太大
Bad character in paramenters 參數(shù)中有不適當(dāng)?shù)淖址?/p>
Bad file name format in include directive 包含命令中文件名格式不正確
Bad ifdef directive synatax 編譯預(yù)處理ifdef有語法錯(cuò)
Bad undef directive syntax 編譯預(yù)處理undef有語法錯(cuò)
Bit field too large 位字段太長
Call of non-function 調(diào)用未定義的函數(shù)
Call to function with no prototype 調(diào)用函數(shù)時(shí)沒有函數(shù)的說明
Cannot modify a const object 不允許修改常量對象
Case outside of switch 漏掉了case 語句
Case syntax error Case 語法錯(cuò)誤
Code has no effect
代碼不可述不可能執(zhí)行到
Compound statement missing{ 分程序漏掉“{”
Conflicting type modifiers 不明確的類型說明符
Constant expression required 要求常量表達(dá)式
Constant out of range in comparison 在比較中常量超出范圍
Conversion may lose significant digits 轉(zhuǎn)換時(shí)會(huì)丟失意義的數(shù)字
Conversion of near pointer not allowed 不允許轉(zhuǎn)換近指針
Could not find file 'xxx' 找不到XXX文件
Declaration missing;說明缺少“;”
Declaration syntax error 說明中出現(xiàn)語法錯(cuò)誤
Default outside of switch
Default 出現(xiàn)在switch語句之外
Define directive needs an identifier 定義編譯預(yù)處理需要標(biāo)識符
Division by zero 用零作除數(shù)
Do statement must have while Do-while語句中缺少while部分
Enum syntax error 枚舉類型語法錯(cuò)誤
Enumeration constant syntax error 枚舉常數(shù)語法錯(cuò)誤
Error directive :xxx
錯(cuò)誤的編譯預(yù)處理命令
Error writing output file 寫輸出文件錯(cuò)誤
Expression syntax error 表達(dá)式語法錯(cuò)誤
Extra parameter in call 調(diào)用時(shí)出現(xiàn)多余錯(cuò)誤
File name too long 文件名太長
Function call missing)函數(shù)調(diào)用缺少右括號
Fuction definition out of place 函數(shù)定義位置錯(cuò)誤
Fuction should return a value 函數(shù)必需返回一個(gè)值
Goto statement missing label Goto語句沒有標(biāo)號
Hexadecimal or octal constant too large 16進(jìn)制或8進(jìn)制常數(shù)太大
Illegal character 'x' 非法字符x
Illegal initialization 非法的初始化
Illegal octal digit 非法的8進(jìn)制數(shù)字
Illegal pointer subtraction 非法的指針相減
Illegal structure operation 非法的結(jié)構(gòu)體操作
Illegal use of floating point 非法的浮點(diǎn)運(yùn)算
Illegal use of pointer 指針使用非法
Improper use of a typedefsymbol 類型定義符號使用不恰當(dāng)
In-line assembly not allowed 不允許使用行間匯編
Incompatible storage class 存儲(chǔ)類別不相容
Incompatible type conversion 不相容的類型轉(zhuǎn)換
Incorrect number format 錯(cuò)誤的數(shù)據(jù)格式
Incorrect use of default Default使用不當(dāng)
Invalid indirection 無效的間接運(yùn)算
Invalid pointer addition 指針相加無效
Irreducible expression tree 無法執(zhí)行的表達(dá)式運(yùn)算
Lvalue required
需要邏輯值0或非0值
Macro argument syntax error 宏參數(shù)語法錯(cuò)誤
Macro expansion too long 宏的擴(kuò)展以后太長
Mismatched number of parameters in definition 定義中參數(shù)個(gè)數(shù)不匹配
Misplaced break
此處不應(yīng)出現(xiàn)break語句
Misplaced continue
此處不應(yīng)出現(xiàn)continue語句
Misplaced decimal point 此處不應(yīng)出現(xiàn)小數(shù)點(diǎn)
Misplaced elif directive 不應(yīng)編譯預(yù)處理elif Misplaced else 此處不應(yīng)出現(xiàn)else Misplaced else directive
此處不應(yīng)出現(xiàn)編譯預(yù)處理else Misplaced endif directive
此處不應(yīng)出現(xiàn)編譯預(yù)處理endif Must be addressable 必須是可以編址的
Must take address of memory location 必須存儲(chǔ)定位的地址
No declaration for function 'xxx' 沒有函數(shù)xxx的說明
No stack 缺少堆棧
No type information 沒有類型信息
Non-portable pointer assignment 不可移動(dòng)的指針(地址常數(shù))賦值
Non-portable pointer comparison 不可移動(dòng)的指針(地址常數(shù))比較
Non-portable pointer conversion 不可移動(dòng)的指針(地址常數(shù))轉(zhuǎn)換
Not a valid expression format type 不合法的表達(dá)式格式
Not an allowed type 不允許使用的類型
Numeric constant too large 數(shù)值常太大
Out of memory 內(nèi)存不夠用
Parameter 'xxx' is never used 能數(shù)xxx沒有用到
Pointer required on left side of-> 符號->的左邊必須是指針
Possible use of 'xxx' before definition 在定義之前就使用了xxx(警告)
Possibly incorrect assignment 賦值可能不正確
Redeclaration of 'xxx' 重復(fù)定義了xxx
Redefinition of 'xxx' is not identical xxx的兩次定義不一致
Register allocation failure 寄存器定址失敗
Repeat count needs an lvalue 重復(fù)計(jì)數(shù)需要邏輯值
Size of structure or array not known 結(jié)構(gòu)體或數(shù)給大小不確定
Statement missing;語句后缺少“;”
Structure or union syntax error 結(jié)構(gòu)體或聯(lián)合體語法錯(cuò)誤
Structure size too large 結(jié)構(gòu)體尺寸太大
Sub scripting missing ] 下標(biāo)缺少右方括號
Superfluous & with function or array 函數(shù)或數(shù)組中有多余的“&” Suspicious pointer conversion 可疑的指針轉(zhuǎn)換
Symbol limit exceeded 符號超限
Too few parameters in call
函數(shù)調(diào)用時(shí)的實(shí)參少于函數(shù)的參數(shù)不
Too many default cases
Default太多(switch語句中一個(gè))Too many error or warning messages 錯(cuò)誤或警告信息太多
Too many type in declaration 說明中類型太多
Too much auto memory in function 函數(shù)用到的局部存儲(chǔ)太多
Too much global data defined in file 文件中全局?jǐn)?shù)據(jù)太多
Two consecutive dots 兩個(gè)連續(xù)的句點(diǎn)
Type mismatch in parameter xxx 參數(shù)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' 沒有定義的標(biāo)號xxx Undefined structure 'xxx' 沒有定義的結(jié)構(gòu)xxx Undefined symbol 'xxx' 沒有定義的符號xxx
Unexpected end of file in comment started on line xxx 從xxx行開始的注解尚未結(jié)束文件不能結(jié)束
Unexpected end of file in conditional started on line xxx 從xxx 開始的條件語句尚未結(jié)束文件不能結(jié)束
Unknown assemble instruction 未知的匯編結(jié)構(gòu)
Unknown option 未知的操作
Unknown preprocessor directive: 'xxx' 不認(rèn)識的預(yù)處理命令xxx Unreachable code 無路可達(dá)的代碼
Unterminated string or character constant 字符串缺少引號
User break
用戶強(qiáng)行中斷了程序
Void functions may not return a value Void類型的函數(shù)不應(yīng)有返回值
Wrong number of arguments 調(diào)用函數(shù)的參數(shù)數(shù)目錯(cuò)
'xxx' not an argument xxx不是參數(shù)
'xxx' not part of structure xxx不是結(jié)構(gòu)體的一部分
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 結(jié)構(gòu)體的長度為零
第四篇:一、向下溝通——下達(dá)任務(wù)技巧
上下級溝通技巧
在職場中,與上級、下級、同事、外部客戶或者自己溝通時(shí),經(jīng)常會(huì)出現(xiàn)一些問題。例如,跨部門溝通時(shí),不同部門因?yàn)槁毮懿煌创粋€(gè)問題的觀點(diǎn)角度不同,容易出現(xiàn)沖突;在部門內(nèi)部,每個(gè)人的立場不同,同樣面臨沖突;部門或者個(gè)人之間因?yàn)楣ぷ靼才挪煌?,有時(shí)工作協(xié)調(diào)困難等。
在生活、工作中,與其他人溝通前,首先面對如何與自己溝通,自我溝通能力與自身的情緒、情商和壓力管理能力等緊密相關(guān)。例如,在工作中,有些人遇到困難無法按時(shí)完成任務(wù)時(shí),不主動(dòng)與領(lǐng)導(dǎo)溝通,導(dǎo)致今后的工作更難開展。因此,每個(gè)人都要學(xué)會(huì)問自己開放式的好問題,掌握自我溝通要點(diǎn)。
一、向下溝通——下達(dá)任務(wù)技巧
【案例】
領(lǐng)導(dǎo)下達(dá)的任務(wù)
在電視劇《杜拉拉升職記》中,杜拉拉的上級領(lǐng)導(dǎo)安排她完成兩件工作:第一,撰寫優(yōu)秀員工評選文案;第二,為評選出的優(yōu)秀員工準(zhǔn)備禮物。
杜拉拉聽后回答:“沒問題!”然后很順利地寫出了文案,并策劃采用筆、本之類的文具系列作為獲獎(jiǎng)禮物,之后把文案報(bào)告和禮品策劃拿給領(lǐng)導(dǎo)審查。出乎杜拉拉意料的是,上級領(lǐng)導(dǎo)對她的方案非常不滿意,說道:“這個(gè)評選文案很像感謝信,沒有體現(xiàn)公司的企業(yè)文化,并且作為全球五百強(qiáng)企業(yè),員工對于優(yōu)秀員工評選具有很高的期望,這樣的禮品和要求差距太遠(yuǎn)……”杜拉拉聽后,只能不停地說:“對不起!我沒有問清楚?!?/p>
上述案例中,領(lǐng)導(dǎo)在給杜拉拉布置工作任務(wù)時(shí),并沒有對工作結(jié)果提出具體要求,也沒有說明要求策劃文案和禮品符合公司的企業(yè)文化,所以在溝通中領(lǐng)導(dǎo)具有一定的責(zé)任。
作為上級,在分配任務(wù)時(shí),需要問自己是否說清楚工作任務(wù);作為下級,在接受任務(wù)時(shí),需要問自己是否明白任務(wù)的具體內(nèi)容。
1.準(zhǔn)確傳達(dá)任務(wù)的意圖
作為上級,要學(xué)會(huì)準(zhǔn)確傳達(dá)任務(wù)的意圖。
【案例】
吩咐下屬復(fù)印文件 某領(lǐng)導(dǎo)要吩咐一項(xiàng)任務(wù)給下級張小姐:“張小姐,請你將那個(gè)調(diào)查報(bào)告復(fù)印兩份,在下班之前送到總經(jīng)理辦公室交給總經(jīng)理,請留意復(fù)印的質(zhì)量,總經(jīng)理要帶給客戶參考!”可以看出,這個(gè)任務(wù)下達(dá)地非常清晰明確,包含了很多關(guān)鍵點(diǎn):復(fù)印兩份、時(shí)間節(jié)點(diǎn)是下班之前、需要注意復(fù)印的質(zhì)量、總經(jīng)理要帶給客戶參考。
如果把這個(gè)任務(wù)簡潔化為:“小張,麻煩您把這個(gè)報(bào)告復(fù)印兩份,待會(huì)交給總經(jīng)理。”這樣與之前任務(wù)對照后發(fā)現(xiàn)缺失了很多關(guān)鍵因素:在時(shí)間上,“待會(huì)”與“下班之前”的概念不一樣;在復(fù)印質(zhì)量上,沒有明確的用途說明,如果復(fù)印件出現(xiàn)污穢,不僅影響公司的內(nèi)部使用和閱讀,還會(huì)達(dá)不到客戶要求。根據(jù)這樣的指示,如果下級沒有很好地完成上級交代的任務(wù),責(zé)任更多地歸于上級領(lǐng)導(dǎo)。
在工作中,如果上級沒有交代任務(wù)背景,下屬依舊會(huì)去做事情,但不會(huì)積極主動(dòng),更不會(huì)用創(chuàng)造性的方式去做,只能被動(dòng)地執(zhí)行,所以上級下達(dá)任務(wù)時(shí),任務(wù)背景不可缺少。
【案例】
下達(dá)布置答謝會(huì)的任務(wù)
某公司市場部的王經(jīng)理將老客戶答謝會(huì)活動(dòng)現(xiàn)場的布置任務(wù)交給了主管小劉,要求小劉在星期五之前完成會(huì)場布置任務(wù)。接受任務(wù)后,小劉作為主管并找來三個(gè)下屬,當(dāng)面告知如何布置會(huì)場,開始親自準(zhǔn)備。
結(jié)果到星期五時(shí),市場部王經(jīng)理非常不滿意會(huì)場布置,提出異議:“為什么將椅子放成一排一排的,不便于大家交流呀!為什么只放三排,才20個(gè)座位,明天可能會(huì)來40多人,也沒有準(zhǔn)備茶點(diǎn)!……”
一方面,作為下屬,雖然小劉積極地執(zhí)行了任務(wù),但是上級王經(jīng)理仍然不滿意,感覺環(huán)境布置不合自己心意;另一方面,小劉感覺已經(jīng)盡心竭力做好工作,王經(jīng)理有些“雞蛋里挑骨頭”,過于苛刻。
通過案例可見,上級和下屬對對方都有看法,工作沒有做到位其實(shí)雙方都有責(zé)任,但在高效溝通中,管理者應(yīng)該承擔(dān)100%的責(zé)任,因?yàn)樯霞壪蛳录壏峙淙蝿?wù)時(shí),沒有將任務(wù)的具體標(biāo)準(zhǔn)說清楚,王經(jīng)理并沒有告訴小劉要將會(huì)場布置成什么樣子,是否需要茶點(diǎn),是否需要條幅等,而且小劉也沒有提問,雙方都以為相互明白,缺少雙向溝通,結(jié)果出現(xiàn)差距。所以上級對下級準(zhǔn)確傳達(dá)任務(wù)的意圖非常關(guān)鍵,上級要將事情說清楚。
2.學(xué)會(huì)使部下積極接受任務(wù) 上級分配任務(wù)之后,要學(xué)會(huì)讓下屬能夠積極地接受任務(wù),不斷地激勵(lì)、激發(fā)下屬,這樣下屬的主觀能動(dòng)性才會(huì)發(fā)揮出來。
具體來說,上級可以通過以下方法促進(jìn)下屬的工作:
態(tài)度和藹,用詞禮貌
在職場中,往往上級不注重對下級的態(tài)度,但是下級特別注重對上級的態(tài)度,而且特別敏感,如“小張把這東西復(fù)印一下”和“小張,麻煩您幫我把這復(fù)印一下”,前者命令似的口吻和后者朋友式的口吻完全不同。因此,在溝通時(shí)需要注重對方的感受,不能永遠(yuǎn)用命令式的口吻,要懂得態(tài)度和藹,用詞禮貌。
讓部下明白工作的重要性
上級向下級分配任務(wù)時(shí),要將工作任務(wù)的重要性推銷給下屬。
【案例】
麥當(dāng)勞的CEO
眾所周知,麥當(dāng)勞是美國企業(yè),但在2004年麥當(dāng)勞公司啟用了一個(gè)新的CEO,他是澳大利亞人。
這位CEO的職業(yè)經(jīng)歷具有傳奇色彩,17歲左右在麥當(dāng)勞打工,具體工作是刷廁所,兩個(gè)小時(shí)后他不愿意干了,他的直屬經(jīng)理就在午餐時(shí)與他交流:“你知道嗎,其實(shí)你做的工作是麥當(dāng)勞里最重要的工作之一,因?yàn)辂湲?dāng)勞具有四大宗旨:品質(zhì)、服務(wù)、物有所值和清潔?!?/p>
從此以后,這位小伙子認(rèn)識到刷廁所工作雖不光鮮但很重要,于是端正工作態(tài)度,充分發(fā)揮工作主觀能動(dòng)性,在四年時(shí)間里把分店中的所有崗位做了一遍,他21歲時(shí)成為年輕的店經(jīng)理,爾后不到10年掌管20多家分店,20年后在美國成為擁有兩萬多家全球連鎖店的公司老板。在他就任的第一天,他談道非常感謝他的第一任直屬經(jīng)理,讓他明白了刷廁所的重要性。
可見,上級向下級分配任務(wù)時(shí),有責(zé)任將工作的重要性推銷給下屬,這樣能夠促使下屬出色地完成任務(wù),成就下屬的職業(yè)生涯。
共同探討,讓部下提出疑問
上級再給下屬分配完任務(wù)之后,需要向下屬提出問題,可以詢問下屬“這件事情你準(zhǔn)備怎么辦?”下屬會(huì)將思路和難點(diǎn)分享出來;如果上級只是詢問“還有沒有問題?”,下級會(huì)因?yàn)閾?dān)心被別人認(rèn)為事多而不敢提問,所以與下級溝通時(shí)需要采用靈活的方式,使部下能夠積極地接受任務(wù)。
3.執(zhí)行前,要下級復(fù)述任務(wù)內(nèi)容 上級向下級傳達(dá)任務(wù)后,需要要求下屬復(fù)述工作任務(wù);即使上級沒有要求復(fù)述,下級也要首先復(fù)述工作任務(wù)。
在工作中,上級和下級都要養(yǎng)成復(fù)述的習(xí)慣,上級要求復(fù)述,下屬主動(dòng)復(fù)述,共同促進(jìn)完成工作。
第五篇:C語言常見錯(cuò)誤小結(jié)
C語言常見錯(cuò)誤小結(jié)-C/C++ / C語言
C語言的最大特點(diǎn)是:功能強(qiáng)、使用方便靈活。C編譯的程序?qū)φZ法檢查并不象其它高級語 言那么嚴(yán)格,這就給編程人員留下“靈活的余地”,但還是由于這個(gè)靈活給程序的調(diào)試帶 來了許多不便,尤其對初學(xué)C語言的人來說,經(jīng)常會(huì)出一些連自己都不知道錯(cuò)在哪里的錯(cuò)誤
??粗绣e(cuò)的程序,不知該如何改起,本人通過對C的學(xué)習(xí),積累了一些C編程時(shí)常犯的錯(cuò)
誤,寫給各位學(xué)員以供參考。
1.書寫標(biāo)識符時(shí),忽略了大小寫字母的區(qū)別。main(){ int a=5;printf(“%d ”,A);} 編譯程序把a(bǔ)和A認(rèn)為是兩個(gè)不同的變量名,而顯示出錯(cuò)信息。C認(rèn)為大寫字母和小寫字母是
兩個(gè)不同的字符。習(xí)慣上,符號常量名用大寫,變量名用小寫表示,以增加可讀性。
2.忽略了變量的類型,進(jìn)行了不合法的運(yùn)算。main(){ float a,b;printf(“%d ”,a%b);} %是求余運(yùn)算,得到a/b的整余數(shù)。整型變量a和b可以進(jìn)行求余運(yùn)算,而實(shí)型變量則不允許
進(jìn)行“求余”運(yùn)算。
3.將字符常量與字符串常量混淆。char c;c= “a ”;在這里就混淆了字符常量與字符串常量,字符常量是由一對單引號括起來的單個(gè)字符,字 符串常量是一對雙引號括起來的字符序列。C規(guī)定以“”作字符串結(jié)束標(biāo)志,它是由系統(tǒng) 自動(dòng)加上的,所以字符串“a”實(shí)際上包含兩個(gè)字符:?a '和? ',而把它賦給一個(gè)字符變 量是不行的。
4.忽略了“=”與“==”的區(qū)別。
在許多高級語言中,用“=”符號作為關(guān)系運(yùn)算符“等于”。如在BASIC程序中 可以寫
if(a=3)then …
但C語言中,“=”是賦值運(yùn)算符,“==”是關(guān)系運(yùn)算符。如: if(a==3)a=b;
前者是進(jìn)行比較,a是否和3相等,后者表示如果a和3相等,把b值賦給a。由于習(xí)慣問題,初學(xué)者往往會(huì)犯這樣的錯(cuò)誤。
5.忘記加分號。
分號是C語句中不可缺少的一部分,語句末尾必須有分號。a=1 b=2 編譯時(shí),編譯程序在“a=1”后面沒發(fā)現(xiàn)分號,就把下一行“b=2”也作為上一行語句的一
部分,這就會(huì)出現(xiàn)語法錯(cuò)誤。改錯(cuò)時(shí),有時(shí)在被指出有錯(cuò)的一行中未發(fā)現(xiàn)錯(cuò)誤,就需要看 一下上一行是否漏掉了分號。{ z=x+y;t=z/100;printf(“%f ”,t);} 對于復(fù)合語句來說,最后一個(gè)語句中最后的分號不能忽略不寫(這是和PASCAL 不同的)。
6.多加分號。
對于一個(gè)復(fù)合語句,如: { z=x+y;t=z/100;printf(“%f ”,t);};復(fù)合語句的花括號后不應(yīng)再加分號,否則將會(huì)畫蛇添足。又如:
if(a%3==0);I++;本是如果3整除a,則I加1。但由于if(a%3==0)后多加了分號,則if語句到此結(jié)束,程序?qū)?/p>
執(zhí)行I++語句,不論3是否整除a,I都將自動(dòng)加1。再如:
for(I=0;I <5;I++);{scanf(“%d ”,&x);printf(“%d ”,x);} 本意是先后輸入5個(gè)數(shù),每輸入一個(gè)數(shù)后再將它輸出。由于for()后多加了一個(gè)分號,使循 環(huán)體變?yōu)榭照Z句,此時(shí)只能輸入一個(gè)數(shù)并輸出它。
7.輸入變量時(shí)忘記加地址運(yùn)算符“&”。int a,b;scanf(“%d%d ”,a,b);這是不合法的。Scanf函數(shù)的作用是:按照a、b在內(nèi)存的地址將a、b的值存進(jìn)去?!?a”指 a在內(nèi)存中的地址。
8.輸入數(shù)據(jù)的方式與要求不符。①scanf(“%d%d ”,&a,&b);輸入時(shí),不能用逗號作兩個(gè)數(shù)據(jù)間的分隔符,如下面輸入不合法: 3,4
輸入數(shù)據(jù)時(shí),在兩個(gè)數(shù)據(jù)之間以一個(gè)或多個(gè)空格間隔,也可用回車鍵,跳格鍵tab。②scanf(“%d,%d ”,&a,&b);C規(guī)定:如果在“格式控制”字符串中除了格式說明以外還有其它字符,則在輸入數(shù)據(jù)時(shí)應(yīng) 輸入與這些字符相同的字符。下面輸入是合法的: 3,4
此時(shí)不用逗號而用空格或其它字符是不對的。3 4 3:4 又如:
scanf(“a=%d,b=%d ”,&a,&b);輸入應(yīng)如以下形式: a=3,b=4
9.輸入字符的格式與要求不一致。
在用“%c”格式輸入字符時(shí),“空格字符”和“轉(zhuǎn)義字符”都作為有效字符輸入。scanf(“%c%c%c ”,&c1,&c2,&c3);如輸入a b c
字符“a”送給c1,字符“ ”送給c2,字符“b”送給c3,因?yàn)?c只要求讀入一個(gè)字符,后 面不需要用空格作為兩個(gè)字符的間隔。
10.輸入輸出的數(shù)據(jù)類型與所用格式說明符不一致。例如,a已定義為整型,b定義為實(shí)型 a=3;b=4.5;printf(“%f%dn ”,a,b);編譯時(shí)不給出出錯(cuò)信息,但運(yùn)行結(jié)果將與原意不符。這種錯(cuò)誤尤其需要注意。
11.輸入數(shù)據(jù)時(shí),企圖規(guī)定精度。scanf(“%7.2f ”,&a);這樣做是不合法的,輸入數(shù)據(jù)時(shí)不能規(guī)定精度。
12.switch語句中漏寫break語句。
例如:根據(jù)考試成績的等級打印出百分制數(shù)段。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只起標(biāo)號的作用,而不起判斷作用。因此,當(dāng)grade值為A時(shí),printf函數(shù)在執(zhí)行完第一個(gè)語句后接著執(zhí)行第二、三、四、五個(gè)printf函數(shù)語句。正確寫 法應(yīng)在每個(gè)分支后再加上“break;”。例如
case 'A ':printf(“85~100n ”);break;
13.忽視了while和do-while語句在細(xì)節(jié)上的區(qū)別。(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);} 可以看到,當(dāng)輸入I的值小于或等于10時(shí),二者得到的結(jié)果相同。而當(dāng)I> 10時(shí),二者結(jié)果就
不同了。因?yàn)閣hile循環(huán)是先判斷后執(zhí)行,而do-while循環(huán)是先執(zhí)行后判斷。對于大于10的
數(shù)while循環(huán)一次也不執(zhí)行循環(huán)體,而do-while語句則要執(zhí)行一次循環(huán)體。
14.定義數(shù)組時(shí)誤用變量。int n;scanf(“%d ”,&n);int a[n];數(shù)組名后用方括號括起來的是常量表達(dá)式,可以包括常量和符號常量。即C不允許對數(shù)組的
大小作動(dòng)態(tài)定義。
15.在定義數(shù)組時(shí),將定義的“元素個(gè)數(shù)”誤認(rèn)為是可使的最大下標(biāo)值。main(){static int a[10]={1,2,3,4,5,6,7,8,9,10};printf(“%d ”,a[10]);} C語言規(guī)定:定義時(shí)用a[10],表示a數(shù)組有10個(gè)元素。其下標(biāo)值由0開始,所以數(shù)組元素a[ 10]是不存在的。
16.在不應(yīng)加地址運(yùn)算符&的位置加了地址運(yùn)算符。scanf(“%s ”,&str);C語言編譯系統(tǒng)對數(shù)組名的處理是:數(shù)組名代表該數(shù)組的起始地址,且scanf函數(shù)中的輸入 項(xiàng)是字符數(shù)組名,不必要再加地址符&。應(yīng)改為:scanf(“%s ”,str);
17.同時(shí)定義了形參和函數(shù)中的局部變量。int max(x,y)int x,y,z;{z=x> y?x:y;return(z);} 形參應(yīng)該在函數(shù)體外定義,而局部變量應(yīng)該在函數(shù)體內(nèi)定義。應(yīng)改為: int max(x,y)int x,y;{int z;z=x> y?x:y;return(z);}