以下摘自黃老師課堂日常答疑、與學(xué)生交流的真實(shí)問題總結(jié),為了便于入學(xué)者學(xué)習(xí)查閱,總結(jié)歸納于此。
1、問:我想判斷一個(gè)數(shù)字是否在一個(gè)區(qū)間里,比如if(90<a<100)可以嗎?
?黃老師答:答案是不可以的! 關(guān)系運(yùn)算符無論是大于小于還是不等于等等,都屬于雙目運(yùn)算符,即參與運(yùn)算的對(duì)象是兩個(gè)。兩個(gè)條件需要兩個(gè)表達(dá)式分開表達(dá),用邏輯與鏈接,即90<a && a<100。
學(xué)生追問:那為什么這樣寫編譯器并且沒有報(bào)錯(cuò)呢?
黃老師答:90<a<100這個(gè)表達(dá)式的意思對(duì)于編譯器看來是看成一個(gè)復(fù)合表達(dá)式,即(90<a)<100,語法上來講是合法的,編譯器會(huì)算計(jì)算90<a的值是真是假,即1或0,再于100進(jìn)行比較,語法上是完全解釋的通的,但if里這個(gè)表達(dá)式的值基本可以肯定恒成立了,因?yàn)闊o論90<a的結(jié)果如何,不是1就是0,但一定小于100!
2、我想判斷一個(gè)變量是不是一個(gè)數(shù)字,比如判斷a是否是99寫成if(a=99)不對(duì)嗎?
黃老師答:在C語言里,判斷兩個(gè)值是否相等要用到算數(shù)運(yùn)算符==! 一個(gè)等號(hào)=意思為賦值,兩者意義完全不同,切勿混淆!
學(xué)生追問:
那這樣寫不可以,為什么編譯不報(bào)錯(cuò)呢?
黃老師答:答案是在if的括號(hào)里,a=90這個(gè)表達(dá)式被編譯器看來是一個(gè)值,也就是90,即與if(90)沒有什么區(qū)別,僅多一個(gè)賦值(把90給a)的副作用。所以完全合法!只不過現(xiàn)在恒為真了!
3、循環(huán)沒有輸出
我寫while循環(huán)
while(1);
{
????????? printf(“Hello www.sztianhecheng.cn\n”,a);
}
這樣寫循環(huán)可以嗎?問為什么沒有輸出呢?
黃老師答:while循環(huán)語法不夠扎實(shí),請(qǐng)注意while循環(huán)的小括號(hào)后面不需要分號(hào)!這樣寫雖然編譯器認(rèn)為可以,但已經(jīng)沒有把花括號(hào)里的
printf(“Hello? www.sztianhecheng.cn\n”,a);
作為循環(huán)體看待了!
學(xué)生追問:為啥?
黃老師答:因?yàn)閣hile小括號(hào)后面的分號(hào)雖然寫這里編譯不會(huì)報(bào)錯(cuò),但單獨(dú)的一個(gè)分號(hào)就是一個(gè)空語句,會(huì)被編譯器認(rèn)為是緊跟while后面的一個(gè)整體,即會(huì)被以假亂真被當(dāng)做”循環(huán)體”看待,自然形成死循環(huán)+空語句的CPU“瞎忙”狀態(tài),執(zhí)行不了printf(“Hello www.sztianhecheng.cn\n”,a);語句!
4.比較兩個(gè)字符串怎么寫?if(str1==str2) 對(duì)嗎?
黃老師答:不可以!比較字符串核心是比較兩個(gè)字符串的內(nèi)容,可以參考使用strcmp函數(shù)。但不可以用數(shù)組名直接比較!因?yàn)閿?shù)組名表示的是數(shù)組首元素的地址!
學(xué)生追問:那就是說這么比較不是在比較兩個(gè)數(shù)組的內(nèi)容?
黃老師答:對(duì),而是比較兩個(gè)地址,是沒有用的!
如果您有什么好問題,歡迎聯(lián)系我們!
后續(xù)將繼續(xù)更新!