記錄學習的第十二天
今天看書的時候,發現了曾經自己犯過錯,改正後還不懂得bug;
竟然懂了;所及今天
分享一下c語言運算子中比較常見的錯誤引起的可愛bug (≧▽≦);
1.這個bug是我自己寫實驗遇到過的,碼來;
char ch;
while
(ch=
getchar()
!='\0'
)
emmm,很簡單的**吧,似乎意思也很簡單;
如果我輸入12345;
結果卻錯的離譜!
12345
他給我輸出一堆格格;
最後的解決辦法,也是很簡單,加個括號!
給ch=getchar()外部加個括號!
char ch;
while
((ch=
getchar()
)!='\0'
)
這樣執行出來就一點錯誤都沒有了,那這是什麼原因呢,來我們解釋一下!
由於!=優先順序高於=;所以…
是不是懂了
所以ch=getchar()!=』\0』的實際意思是ch=(getchar()!=』\0』);
所以當然不能滿足我的需求,
(ch=getchar())!=』\0』這麼寫才是正確的方法!
2、不知道同學們用結構體的時候有沒有遇到過這種情況:
碼來
struct studentstu;
intmain
(void
)
這段**,乍一看似乎沒什麼問題,但是編譯會報錯;
是int x=*p.data;這一行有問題;
emmmmm,沒毛病啊;
*p代表stu,這不就是stu.data嗎;
還是運算子優先順序的問題,。運算子優先順序高於※;
int x=*p.data;實際上是:int x=※(p.data);
所以型別會不匹配導致報錯!
還有一些其他的我就不舉例子了,其實大多是型別不符或者優先順序的問題導致這種bug的出現。
也有我之前說的else懸掛所引起的問題;
當然如果基礎特別牢固的同學肯定不會犯這種錯誤
但是其他同學咋辦呢;
我的方法是,優先順序我只記住兩個,乘除大於加減;
其他只要出現運算子復合的運算,我都加括號;
哎我管你們誰優先順序高,我想讓誰高,我就給你加上括號;
不給你們出bug的機會;
語句也是,什麼if,else
什麼while,for迴圈
我用我就給您加上括號;
想出現讓我找不出來的bug,不可能,想都別想!
畢竟找bug這麼可愛的活,咱是一點都不喜歡呢!
好了,今天的結束;
end;
運算子優先順序 C 運算子優先順序
c 運算子優先順序 優先順序運算子 描述方向1 scope resolution 範圍解析 left to right 2 suffix postfix increment and decrement 字首 字尾遞增和遞減 function call 函式呼叫 array subscripting ...
C語言運算子優先順序
優先順序運算子 名稱或含義 使用形式 結合方向說明1 陣列下標 陣列名 常量表示式 左到右 圓括號 表示式 函式名 形參表 成員選擇 物件 物件.成員名 成員選擇 指標 物件指標 成員名2 負號運算子 表示式 右到左單目運算子 型別 強制型別轉換 資料型別 表示式 自增運算子 變數名 變數名 單目運...
c語言運算子優先順序
優先順序運算子 名稱或含義 使用形式 結合方向說明1 陣列下標 陣列名 常量表示式 左到右 圓括號 表示式 函式名 形參表 成員選擇 物件 物件.成員名 成員選擇 指標 物件指標 成員名2 負號運算子 表示式 右到左單目運算子 型別 強制型別轉換 資料型別 表示式 自增運算子 變數名 變數名 單目運...