回覆列表
  • 1 # 使用者342654797228796

    結果錯,不就剛好證明了你錯了嗎?你說程式碼沒錯,是語法沒錯,考慮不全面,邏輯錯不算錯嗎?你沒有想到的事,他就不存在嗎?

  • 2 # 碼中尋樂

    程式碼沒錯,估計題主表達的意思是能正常編譯透過吧,只要沒有語法錯誤,都會編譯透過的,但並不代表程式碼沒錯,這是兩個概念。結果總是錯,說明程式碼有錯誤,需要進一步除錯排查。

    考慮如下程式碼:

    從語法上來講它們都沒有錯,能正常編譯透過,也能執行。但是輸出的結果卻跟預估的不一樣,看起來結果似乎是錯誤的?

    為什麼fv的輸出不是5.567891534? 為什麼cv的輸出不是129?

    其實都是有原因的,單精度浮點型別float的小數點後有效位只有6位,後面的會四捨五入; 有符號字元型別的數值表達範圍是-128~127, 而此處被賦值129,已經溢位了,按它的二進位制佈局就是10000001,最高位是符號位,1是負數, 將後面7位取反再加一就是1111111,其值為127,帶上符號就是-127。

    所以看似錯誤的結果其實是必然,關鍵是要自己明白究竟錯誤的是什麼。

  • 3 # 資料結構

    你說的沒錯應該是指語法沒報錯的。但是邏輯錯了怎麼辦呢?比如你有個地方忘記賦值,忘記自增,

    ==打成了=變成了賦值。

  • 4 # 黃河邊

    有一次真實的經歷,有一段程式碼有多種情況分別處理,我是用switch case來寫的,結果有一個case始終執行不到,使用偵錯程式跟蹤發現,即使條件滿足,也無法進入這個case的執行,多次檢查程式碼也沒有發現什麼問題。最後從周圍找了幾個高手,也沒有發現問題。

    真是困惑不解了,後來沒有辦法了,就把switch case改成if ...else if,問題居然就解決了,真是太神了。

    後來想可能是編譯器有問題,我們的環境是風河嵌入式系統,編譯器也是他們提供的。

  • 5 # 深飄強哥

    寫c語言的時候,如果程式碼沒錯,這隻能說明語法沒有出錯,直接導致的結果就是能編譯透過,並不意味著執行的結果就是正確的。影響c語言程式碼執行結果的因素非常多。

    一、指標的不正確運用;

    二、變數精度問題。char,int,unsigned int,long ,float等,如果變數精度使用不正確,也會影響運算結果;

    三、運算子的應用不正確。例如除,取餘的區別;

    四、正負符號位;

    五、運算子的優先順序使用;

    六、編譯器不同。各種編譯器也可能造成結果不一致;

    C語言雖然是一門比較簡單的語言,但是要掌握這些細節,其實並不容易。

  • 6 # 霹靂263521714453

    程式碼沒錯? 你這麼確定? 只要結果不是你的預期就是程式碼的錯誤 對於所有程式語言都一樣 只不過c語言底層耦合度高所有比別的語言要更細心

  • 7 # 科技專家

    美好一天很榮幸為大家解答這個問題,讓我們一起走進這個問題,現在讓我們一起探討一下。

    有一次真實的經歷,有一段程式碼有多種情況分別處理,我是用switch case來寫的,結果有一個case始終執行不到,使用偵錯程式跟蹤發現,即使條件滿足,也無法進入這個case的執行,多次檢查程式碼也沒有發現什麼問題。最後從周圍找了幾個高手,也沒有發現問題。

    真是困惑不解了,後來沒有辦法了,就把switch case改成if ...else if,問題居然就解決了,真是太神了。

    後來想可能是編譯器有問題,我們的環境是風河嵌入式系統,編譯器也是他們提供的。

    在以上的分享關於這個問題的解答都是個人的意見與建議,我希望我分享的這個問題的解答能夠幫助到大家。

  • 8 # Hdxnx

    大機率邏輯問題,很多人很多時候寫程式碼都不喜歡畫流程圖,結果導致流程中有邏輯細節問題;

    小機率環境問題,執行環境不一樣,可能導致偏差!

  • 9 # 愛吃火鍋的小青年

    以我為時不長的7年開發經驗告訴你,永遠不要先懷疑機器,環境,99.99999%是自己寫的bug,不過話說回來,不寫bug不就失業了[捂臉][捂臉][捂臉]

  • 10 # 手工浩哥

    程式設計錯誤不一定是語法錯誤,也有可能是邏輯錯誤,語法錯誤很好排除,邏輯錯誤很難發現和排除,一行一行debug有時候比重構程式碼還麻煩。如果是小專案,最好把演算法流程畫清楚,框架要做到心中有數,大專案的話,老實debug吧

  • 11 # BWanger軟體開發達人

    我想你要表達的是,編繹時,沒顯示出錯,但就是結果錯了。要細緻地找原因。

    根據我以往的經驗,原因有以下幾點。

    1,記憶體沒有釋放。

    用new,malloc等分配記憶體,而在結束時來釋放,頻繁呼叫,系統崩潰。

    或者根本沒使用new或malloc,在使用記憶體時異常。

    2,變數與地址用錯。

    char *p;

    char cp

    第一個p指地址,在程式中用錯。

    3,畫筆CPen,CStatic等未恢復

    如:oldpen=pdc一>SelectObject(&m_pen);

    在結束,沒有pdc一>SelectObject(oldpen);

    導致顏色混亂。

    4,中斷使用不當,或者回調callback函式使用不當.

    5,c語言對變數型別有嚴格要求,unsigned與signed區別還是很大的,詳細檢查函式原型。

    6,最後檢查演算法,框圖。是否基本演算法有誤。這個很難做。相信大家都很自負,堅信演算法沒錯。對照數學演算法與你的程式演算法是否一致。

    7,浮點運算。相信大家認為1.0十1.0=2.0無疑。如果double與其它變數轉換出問題,沒準是這樣的結果:

    1.0十1.0=1.9999999999......

  • 12 # 棒槌121

    程式碼肯定有錯,不過c的話,因為總是要操作記憶體,有時候記憶體破壞了,比較常見的是寫越界了,導致使用那段記憶體的程式碼總報錯,而那段程式碼本身是沒錯的

  • 13 # mubaohong

    錯誤有兩種:語法錯誤和邏輯錯誤。

    前者,編譯過程中編譯器會報錯。

    後者,就是程式有錯。例如,c語言不做越界檢查,陣列越界不報錯,但結果不正確。還有未初始化就引用值,等等。

    所以你的問題本身就是錯誤,先設定自己沒錯,再問是誰的錯。

    軟體工程:沒有錯誤是不可能的,唯一不變的就是錯誤本身。

    出了錯。先得懷疑一切,一步步排除錯誤,而不是堅持自己沒錯。

  • 14 # 四葉草之星星

    這問題就是矛盾的,假設沒有錯,那結果肯定是正確的,假設有錯,那結果就是正確的。你的問題是程式碼沒有錯,結果是錯誤的,不符合邏輯,所以程式碼肯定是錯的.

  • 15 # 姓wang有錯嗎

    你寫的程式碼,如果你覺得你的程式碼沒錯,但是執行出錯了,可以肯定的告訴你,說明你的知識還不夠,可能是語言層面,可能是邏輯問題,可能是編譯最佳化,可能是作業系統相關,反正一句話就是在你有限的知識體系內,根本不知道問題所在,所以才有此疑問。把你的錯誤放到stackoverflow上一查就出來了。相信我,你不是第一個遇到同樣問題的人。

  • 16 # 哇咔咔n97

    我記得朋友和我說過一個國外的技術大牛,他說他寫的程式碼邏輯絕對不會有錯,如果有錯了,一定是編輯器bug,難道這個人就是你??

  • 17 # 我不是間諜

    可能性很多,比如小數點截斷,機器位數不同,編譯器版本不同,你輸入逗號是中文字元,編譯器程式碼檢查的要求不同,比如你用c語言的語法編譯器標準卻是c++11,很多語法都不允許這麼寫了。

  • 18 # 龍鳳寶爸育兒記錄

    根據您的描述,首先排除您的程式碼語法上出現錯誤,因為這種錯誤在程式碼編譯時,編譯器就會報錯,這種錯誤相對容易好找。

    然後就是查詢程式碼邏輯上的錯誤,將自己的構思透過畫流程圖展示出來,然後將程式執行的流程和自己的構思流程對照是否吻合。

    之後再查詢欄位的資料型別是否正確,比如如果儲存型別為小數時,必須定義為float或double型別,否則顯示結果肯定跟預期的完全不一樣。

    最後如果還是程式執行錯誤,那麼恭喜你,發現了編譯器的BUG了!

  • 19 # NICHOLAS55184785

    碰到過,但其實還是程式碼錯,微控制器msp430引腳高低的暫存器,應該用v開頭的那個修飾的,結果沒寫,被最佳化掉了

  • 20 # HOPEAMOR

    如果你是照書敲得,可能是編譯器版本問題,書中程式碼很早,呼叫庫也是有區別的,另外可能和設定有關,亦或者之前的不安全不嚴格的形式,在新的編譯器後進行了嚴格的限制

  • 中秋節和大豐收的關聯?
  • 每天走一萬步會傷身?