首先,這個程式碼本身基本是沒有問題的;
我為之進行了測試:
那麼你的程式碼為何不能正確執行呢, 在你的scanf中讀取的內容是一個整數a,然後一個英文半形逗號,然後一個整數b,然後一個英文半形逗號,最後一個整數c;
你在測試執行的時候提供的輸入值是什麼呢, 是一個整數a, 一箇中文逗號, 在此時, 你需要了解一下scanf的讀取機制, 在你電腦的緩衝區中, 的確儲存了你的輸入, 是整數a, 然後一箇中文逗號, 然後整數b,一箇中文逗號, 最後一個整數c; scanf在從緩衝區讀取你的輸入的時候, 首先接受到了第一個數字a, 將其讀入了記憶體中把a賦值為a; 但是之後scanf讀到了一箇中文逗號, 這與你的格式化讀入英文半形逗號並不相符, 所以scanf會自動跳過你後面的讀入, 直接執行後面的語句, 所以你的錯誤中, 只讀取到了第一個數值13;
此外, scanf的返回值會返回一個整數表示scanf函式成功讀取的變數個數, 你可以自己嘗試一下輸出你的scanf的返回值, 你的測試中可能返回值是1;
瞭解了問題的原因之後, 如何改正也就顯而易見了, 程式碼可以保持原樣, 只需要在測試執行的時候間隔符輸入英文半形逗號即可;
此外, 給你提供2個小建議!
1.你的bett函式最好能放在main函式上面定義, 或者使用原型宣告, 否則在有的編譯器中可能會報錯, 之所以你執行正常可能是因為你的gcc預設支援了implicit function declaration功能, 如果你的bett函式返回值是float或者double可能就不行了;
2.在放出程式碼請其他人幫助debug的時候, 最好要闡明自己為了解決問題而做出的努力, 而不是僅丟擲問題; 而且您這樣用手機直接拍螢幕的方式非常不優雅, 不利於他人閱讀你的程式碼, 也不利於他人除錯你的程式碼, 沒有人會願意看著你並不清楚的圖片一行行敲和你一樣的程式碼; 我推薦一個較好的姿勢可以是這樣:
option1. 在知乎中直接插入程式碼塊 像這樣:
option2. 將程式碼貼上至paste.ubuntu 之後給出程式碼連結 然後貼出程式碼截圖,方便他人除錯你的程式碼;
首先,這個程式碼本身基本是沒有問題的;
我為之進行了測試:
那麼你的程式碼為何不能正確執行呢, 在你的scanf中讀取的內容是一個整數a,然後一個英文半形逗號,然後一個整數b,然後一個英文半形逗號,最後一個整數c;
你在測試執行的時候提供的輸入值是什麼呢, 是一個整數a, 一箇中文逗號, 在此時, 你需要了解一下scanf的讀取機制, 在你電腦的緩衝區中, 的確儲存了你的輸入, 是整數a, 然後一箇中文逗號, 然後整數b,一箇中文逗號, 最後一個整數c; scanf在從緩衝區讀取你的輸入的時候, 首先接受到了第一個數字a, 將其讀入了記憶體中把a賦值為a; 但是之後scanf讀到了一箇中文逗號, 這與你的格式化讀入英文半形逗號並不相符, 所以scanf會自動跳過你後面的讀入, 直接執行後面的語句, 所以你的錯誤中, 只讀取到了第一個數值13;
此外, scanf的返回值會返回一個整數表示scanf函式成功讀取的變數個數, 你可以自己嘗試一下輸出你的scanf的返回值, 你的測試中可能返回值是1;
瞭解了問題的原因之後, 如何改正也就顯而易見了, 程式碼可以保持原樣, 只需要在測試執行的時候間隔符輸入英文半形逗號即可;
此外, 給你提供2個小建議!
1.你的bett函式最好能放在main函式上面定義, 或者使用原型宣告, 否則在有的編譯器中可能會報錯, 之所以你執行正常可能是因為你的gcc預設支援了implicit function declaration功能, 如果你的bett函式返回值是float或者double可能就不行了;
2.在放出程式碼請其他人幫助debug的時候, 最好要闡明自己為了解決問題而做出的努力, 而不是僅丟擲問題; 而且您這樣用手機直接拍螢幕的方式非常不優雅, 不利於他人閱讀你的程式碼, 也不利於他人除錯你的程式碼, 沒有人會願意看著你並不清楚的圖片一行行敲和你一樣的程式碼; 我推薦一個較好的姿勢可以是這樣:
option1. 在知乎中直接插入程式碼塊 像這樣:
option2. 將程式碼貼上至paste.ubuntu 之後給出程式碼連結 然後貼出程式碼截圖,方便他人除錯你的程式碼;