c語言踩坑總結
運算子優先順序引發的問題:
先來看兩行程式碼: ?:與 = 運算子的優先順序
while (*pp != '\0')*pp != ' ' && !flag ? num++, flag = 1, pp++ : pp++, flag = 0;
while (*pp != '\0')*pp != ' ' && !flag ? num++, flag = 1, pp++ : flag = 0, pp++;
//這兩行程式碼下面一行會報錯:表示式必須是可修改的左值
不同之處僅僅在於exp1?exp2:xep3中exp3中的兩句交換了個位置而已?:運算子的優先順序要高於=運算子,所以第二句會被編譯器理解為: while (*pp != '\0')(*pp != ' ' && !flag ? num++, flag = 1, pp++ : flag) = 0, pp++;
解決辦法:在 ? 和 : 的中間加一個括號,在 : 和 ; 中間也加一個括號
while (*pp != '\0')*pp != ' ' && !flag ? num++, flag = 1, pp++ :( flag = 0, pp++);
if else的巢狀問題:
最近在寫大整數表示式運算的時候出現了一堆bug,改了又改,不過感覺比較難發現的還是這個if else 的巢狀
static char *B_Caculator(char a[], char b[], char method, char result[])
{
//char result[100000];
switch (method)
{
case '+':
if (a[0] == b[0] && a[0] == '-') {
BigIntegerAdd(&a[1], &b[1], result);
BigIntegerResultReverse(result);
result[strlen(result) + 1] = '\0';
result[strlen(result)] = '-';
BigIntegerResultReverse(result);
}
if(a[0]=='-'&&b[0]!='-')BigIntegerSub(b, &a[1], result);
if (b[0] == '-'&&a[0] != '-')BigIntegerSub(a, &b[1], result);
else BigIntegerAdd(a, b, result);
break;
case '-':
這是一段程式碼,分別對兩個負數相加兩個正數相加一正一負相加作了判斷 現假設a="-123",b="123",則它不滿足第一種兩個都是負數的情況,但滿足第二種情況,所以執行了BigIntegerSub(b, &a[1], result);執行完畢後又來判斷第三種情況(既a為負b為正的情況)不滿足,這時候又執行了最後一個else BigIntegerAdd(a, b, result);這就導致了錯誤,原本想要的是在都不滿足所有列出的情況的時候才執行最後一條else語句,但現在的情況其實是隻要第三個if語句的條件不滿足就會執行else語句,解決方法就是在每個if語句執行完後加個break,或者寫成if{}else if{}else if{}else{}的形式
static char *B_Caculator(char a[], char b[], char method, char result[])
{
//char result[100000];
switch (method)
{
case '+':
if (a[0] == b[0] && a[0] == '-') {
BigIntegerAdd(&a[1], &b[1], result);
BigIntegerResultReverse(result);
result[strlen(result) + 1] = '\0';
result[strlen(result)] = '-';
BigIntegerResultReverse(result);
}
else if(a[0]=='-'&&b[0]!='-')BigIntegerSub(b, &a[1], result);
else if (b[0] == '-'&&a[0] != '-')BigIntegerSub(a, &b[1], result);
else BigIntegerAdd(a, b, result);
break;
case '-':
相關文章
- Vue + TypeScript 踩坑總結VueTypeScript
- C語言大總結C語言
- C語言全面總結-3C語言
- C 語言程式碼總結
- Kafka SASL ACL配置踩坑總結Kafka
- 【面試篇】Go語言常見踩坑(一)面試Go
- Java語言與C++語言的差異總結JavaC++
- stylelint 接入實戰踩坑總結
- “踩坑”經驗分享:Swift語言落地實踐Swift
- mpvue小程式以及微信直播踩坑總結Vue
- ReactNative 之FlatList踩坑封裝總結React封裝
- 使用setInterval與clearInterval踩的小坑總結
- [心得]Mac下編譯thrift踩坑總結Mac編譯
- C 語言程式設計習慣總結程式設計
- C 語言預處理命令總結大全
- C語言指標部分教學總結C語言指標
- Flutter 開發踩坑記錄(乾貨總結)Flutter
- 美團小程式框架mpvue踩坑總結編一框架Vue
- Linux各大發行版個人踩坑總結Linux
- C語言指標總結大學霸IT達人C語言指標
- c語言常用小知識點總結1C語言
- 關於c語言輸入字串的總結C語言字串
- C語言字串操作總結大全(超詳細)C語言字串
- 鵬哥C語言初識課程總結C語言
- C語言常用字串操作函式總結C語言字串函式
- C 語言簡單演算法回顧總結演算法
- C語言教程——03 C語言結構C語言
- C語言知識彙總 | 00-C語言知識彙總目錄C語言
- C語言(結構體)C語言結構體
- Webpack的踩坑與彙總Web
- golang的defer踩坑彙總Golang
- c語言指標彙總C語言指標
- 給你總結幾個ES下最容易踩的坑
- [rabbitmq]安裝ampq的擴充套件的踩坑總結MQ套件
- 電視機頂盒web開發總結,避免踩坑Web
- C語言小白記錄自己的錯題和總結C語言
- Go語言基礎語法總結Go
- C語言 連結串列排序C語言排序