我們能不能規劃像手邊小計算機操作模式的程式呢?畢竟比較跟我們日常的習慣比較接近。其實 scanf() 的格式化字串可以用多個轉換字符,就跟函數 printf() 類似,因此直接要求使用者輸入運算式是可行的。
我們提供的新版本如下
#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;
}
/* 《程式語言教學誌》的範例程式
http://pydoing.blogspot.com/
檔名:calculator2.c
功能:接受使用者輸入的四則運算器
作者:張凱慶
時間:西元2010年7月 */改變的地方就是把原先需要 6 行的輸入部份,包含 3 行的提示訊息,使用者也需要連續輸入然後按 3 次 return 或 Enter 鍵,現在改成兩行,就在第 9 行及第 10 行
printf("請輸入計算式,如 2+2: "); //提示使用者輸入的文字
scanf("%d %c %d", &a, &opt, &b);函數 scanf() 直接接受三項輸入值,注意,我們在格式化字串中每一個轉換字符都用空格分開。
來編譯執行看看吧!

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