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