我們能不能規劃像手邊小計算機操作模式的程式呢?畢竟比較跟我們日常的習慣比較接近。其實 scanf() 的格式化字串可以用多個轉換字符,就跟函數 printf() 類似,因此直接要求使用者輸入運算式是可行的。
我們提供的新版本如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | #include <stdio.h> int main( void ) { int a, b; //宣告需要用到的變數 char opt; printf ( "這個程式會依符號計算兩個整數的和、差、積、商....\n" ); printf ( "請輸入計算式,如 2+2: " ); //提示使用者輸入的文字 scanf ( "%d %c %d" , &a, &opt, &b); //以下會依運算子計算並印出結果 printf ( "結果如下: \n" ); switch (opt) { case '+' : printf ( "%d + %d = %d\n" , a, b, a + b); break ; case '-' : printf ( "%d - %d = %d\n" , a, b, a - b); break ; case '*' : printf ( "%d * %d = %d\n" , a, b, a * b); break ; case '/' : printf ( "%d / %d = %d\n" , a, b, a / b); break ; default : printf ( "輸入錯誤!\n" ); break ; } return 0; } /* 《程式語言教學誌》的範例程式 檔名:calculator2.c 功能:接受使用者輸入的四則運算器 作者:張凱慶 時間:西元2010年7月 */ |
改變的地方就是把原先需要 6 行的輸入部份,包含 3 行的提示訊息,使用者也需要連續輸入然後按 3 次 return 或 Enter 鍵,現在改成兩行,就在第 9 行及第 10 行
9 10 | printf ( "請輸入計算式,如 2+2: " ); //提示使用者輸入的文字 scanf ( "%d %c %d" , &a, &opt, &b); |
函數 scanf() 直接接受三項輸入值,注意,我們在格式化字串中每一個轉換字符都用空格分開。
來編譯執行看看吧!

只需要一次輸入,似乎好用好多耶!的確,寫出相同功能的程式有很多種不同的設計方式,每一種方式都有優點跟缺點,我們需要學習的是如何在開發軟體時,學會選擇適合開發目標的方法,這在學習程式設計會是一項重要的課題。
就像有些方法省時,但是浪費記憶體空間,有些方法費時,卻能節省記憶體空間
問題與討論
- 留意四則運算器中的除法,結果是不是整數呢?
- 承上例,如果都是整數,有沒有方法可以算出帶有小數點的結果呢?
- 請將變數 a 及變數 b 改成宣告為 float 型態,然後函數 scanf() 與 printf() 中格式化字串都改為 %f ,重新編譯執行,會得到什麼樣的結果呢?
- 承上例,利用除法算得的結果,觀察精確到小數點後的位數。
沒有留言:
張貼留言