[問題] scanf 的奇怪問題
遇到的問題: C 語言 scanf() 的問題
希望得到的正確結果: 錯誤發生
程式跑出來的錯誤結果: 錯誤沒有發生
測試平台: Mac - GCC 4.0.1
Windows XP - Dev-C++
有問題的code:
#include <stdio.h>
int main(void)
{
//int a, b; //宣告需要用到的變數
int a, b, t; //宣告需要用到的變數
char opt;
printf("這個程式會依符號計算兩個整數的和、差、積、商....\n");
printf("請輸入計算式,如 2+2: "); //提示使用者輸入的文字
scanf("%d %c %d", &a, &opt, &b);
//t = scanf("%d %c %d", &a, &opt, &b);
//printf("t = %d\n");
//如果使用者輸入的除數為 0 ,將除數改為 1
if (opt == '/' && b == 0) {
b = 1;
}
//以下會依運算子計算並印出結果
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;
}
補充說明:
Mac 底下編譯,結果舉例
$ ./calculator4
這個程式會依符號計算兩個整數的和、差、積、商....
請輸入計算式,如 2+2: 3-3
結果如下:
3 - 3 = 0
$ ./calculator4
這個程式會依符號計算兩個整數的和、差、積、商....
請輸入計算式,如 2+2: ooo
結果如下:
輸入錯誤!
$ ./calculator4
這個程式會依符號計算兩個整數的和、差、積、商....
請輸入計算式,如 2+2: o-9
結果如下:
輸入錯誤!
$ ./calculator4
這個程式會依符號計算兩個整數的和、差、積、商....
請輸入計算式,如 2+2: 9-o
結果如下:
9 - 0 = 9
$
若是將程式多宣告的變數 t 刪除
也就是採用註解化的那一行宣告
最後一項測試 9-o 才會出現不正常的整數
Windows XP 底下用 Dev-C++ 編譯
則是不管有沒有多宣告變數 t
輸入 b 的時候用任意非整數的字符代替
b 的值都會是 53
基本上這是小弟寫 C 語言教材準備拿來當範例的程式
原本預期錯誤會發生,然後加入錯誤防範的機制
變數 t 原要用為接收 scanf() 的回傳值
現在多一個變數 t ,居然把不正確的 b 直接歸零
小弟寫程式資歷尚淺,不解何故,盼高手指教
文章稍長,謝謝各位耐心閱讀,感激不盡!
--
程式語言:教學誌 http://pydoing.blogspot.com/
C 語言教材 http://pydoing.blogspot.com/p/c-tutorial.html
Python 教材 http://pydoing.blogspot.com/2008/09/blog-post.html
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.169.141.42
※ 編輯: monomorium 來自: 118.169.141.42 (07/31 14:59)
→
07/31 15:32, , 1F
07/31 15:32, 1F
→
07/31 15:33, , 2F
07/31 15:33, 2F
→
07/31 15:34, , 3F
07/31 15:34, 3F
→
07/31 15:42, , 4F
07/31 15:42, 4F
→
07/31 15:42, , 5F
07/31 15:42, 5F
→
07/31 15:42, , 6F
07/31 15:42, 6F
→
07/31 15:43, , 7F
07/31 15:43, 7F
→
07/31 15:43, , 8F
07/31 15:43, 8F
→
07/31 15:43, , 9F
07/31 15:43, 9F
→
07/31 15:43, , 10F
07/31 15:43, 10F
→
07/31 15:43, , 11F
07/31 15:43, 11F
→
07/31 15:44, , 12F
07/31 15:44, 12F
→
07/31 15:45, , 13F
07/31 15:45, 13F
→
07/31 15:46, , 14F
07/31 15:46, 14F
→
07/31 15:52, , 15F
07/31 15:52, 15F
→
07/31 15:54, , 16F
07/31 15:54, 16F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章