台灣最大程式設計社群網站
線上人數
1092
 
會員總數:245908
討論主題:189500
歡迎您免費加入會員
討論區列表 >> C/C++ >> 判斷整數/浮點數,並分別求乘積和比大小
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
判斷整數/浮點數,並分別求乘積和比大小
價值 : 50 QP  點閱數:150 回應數:4
樓主

Mars
門外漢
0 6
117 13
發送站內信

捐贈 VP 給 Mars
各位前輩好
問題如下(請使用C語法)
請讓使用者依序輸入數字,直到輸入q停止。

列印出浮點數之乘積的和(所有浮點數相乘)。
列印出整數之乘積的和(所有整數相乘)。
比較上面兩者的大小,並列印出
"Float > Int"或"Float = Int"或"Float < Int"

小弟想到使用字串用'.'來判斷是否為小數
但剛學許多地方,懇請各位前輩指點
謝謝





搜尋相關Tags的文章: [ 判斷整數浮點數 ] ,
本篇文章發表於2020-04-30 07:16
1樓
最有價值解答

Raymond
檢舉此回應
你用
所以最多只能存 7 個字元長度的字串 (str[0...6]), 因為你至少要保留一個位子給終結字元。
建議用 #define 符號來取代 8.


這裡有兩個錯誤, 首先 str != 'q' 是錯誤的語法。'str' 在運用時是個指標, 指向陣列第一個元素: str 等同於 &str[0], 所以指標是不能跟字元來做比較的。字串的比較要用 strcmp() 或 strncmp()。有些編譯器有支援 _stricmp() 及 _strnicmp(), 但它們不是標準函式.

另外一個嚴重的問題是: 在這裡, 'str' 並沒賦值, 也沒初始化, 它的內容可以是任何值, 直接拿來檢查內容會導致不可預期的結果。最簡單的作法就是在定義 str 陣列時順便初始化:




這是不安全的寫法, 因為它無法阻止使用者輸入超過 str 陣列的長度, 而這一旦發生, 就會導致不可預期的結果。
你可以用:

來告訴 scanf() 最多讀入 7 個字元. 但這種寫法不太方便, 因為如果你更改陣列長度, 你就得逐行檢查看哪裡需要更新。當然要自動化也不是不行, 用 C 語言的 preprocessing 就可以自動化:


要不然也可以考慮用 fgets(), 只是它會把輸入的 return 鍵 '\n' 也存入。 下面的例子會示範 fgets() 的用法。


atoi/f/l 其實並不好用, 因為它們無法提供錯誤訊息。比較好的函式是 strtol/ul/d, 因為它們可以提供更多訊息。

大概就這樣,下面是完整程式:

本篇文章回覆於2020-05-02 06:25
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

Mars
捐贈 VP 給 Mars 檢舉此回應
感謝Raymond前輩解說
好多語法都不認識,小弟會再研究
經測試後發現q不會離開迴圈....
本篇文章回覆於2020-05-02 08:32
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

Raymond
檢舉此回應
>經測試後發現q不會離開迴圈...

因為 fgets() 會存入 enter 鍵, 所以比較的話也要把 '\n' 考慮進去。要不然就要把 str 裡面的 \n 取掉:

本篇文章回覆於2020-05-02 10:01
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

Mars
捐贈 VP 給 Mars 檢舉此回應
感謝Raymond前輩解說
小弟再研究研究
本篇文章回覆於2020-05-03 08:59
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.