為什麼這篇Scanf 錯誤鄉民發文收入到精華區:因為在Scanf 錯誤這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者monomorium (不再寫詩的詩人)看板C_and_CPP標題[問題] 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)