各位大大好...我是一個新手
寫了一個輸入數字判定<=>0的程示

DEV C++ ....求助DEV C++ ....求助

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int a;
printf("請輸入一個數字:\n");
scanf("%d",&a);
if (a<0)
printf("%d<0.\n",a);
else if (a==0)
printf("%d=0.\n,a);
else if (a>0)
printf("%d>0.\n,a);
else
printf("你輸入的不是數字.\n");
sysytem("pause");
return 0 ;
}
程式執行後輸入數字都沒有問題,但我輸入字元例如:A
卻會出現 A=36,36>0.是不是我的程式宣告有問題?
不是應該我輸入A後,程式比對是否為int,是否>,<,=0後
會執行最後一行你輸入的不是數字嗎
請大大幫忙一下或指導我一下
謝謝
文章關鍵字
請先去了解C的資料型態(字元和整數的不同),再查ASCII字碼表,就可以知道為何會這樣了。
偷懶方式,直接用google偷師....

hughtseng wrote:
請先去了解C的資料...(恕刪)

不好意思喔....可以講明白一點嗎
36我查了一下是$
A不是應該是65嗎...
所以您的意思是說應該要用ASCII的方式去示別整數或是字元嗎
如果我輸入的整數是1000也是適用在ASCII嗎???
這個答案..建議樓主先爬文或去圖書館借本書,把變數型別說明看一遍..
apl500500 wrote:
不好意思喔....可...(恕刪)
你不可以強制把 char 'A' 當作 int 抓取, 不然會出現無法預期的結果...
如果允許輸入 'A' , 你只能先當作 char 或是 string 抓取, 再判斷是否為數字....

正常來說, 初學者的題目不應該包含防堵 'A' 的誤輸入,
也許你可以忽略 'A' 的誤判?
或是你們已經不是在上初學者的課程, 但你真的還是個初學者(沒學好?), 那就另當別論...

ps. 我在 linux 下發現 'A' 抓到是 數字0, 不是 36 喔...
所以你不要糾結 36 代表代表什麼了, 因為這個 36 是個誤動作造成的異常值, 不代表任何意義....
兔貴肇朋:本人所發表和回應的文章,都是晚消化,本人不對其導致的結果承擔任何責任.

殺人熊 wrote:
你不可以強制把 char...(恕刪)

謝謝您...殺人熊
那我瞭解了
我以為我設定了if的條件
程式一一比對後
會跑最後一個else的結果
還是謝謝你
你應該先去了解 scanf 中 format specifier (%d, %f, %s, ..etc)的使用方式
還有遇到各種輸入情況時的反應,以及 scanf 回傳值的意義

以你的例子來說 %d 是要輸入一個整數,但是輸入的是一個字母/字串
scanf不會把A這個字母/字串硬塞給a,所以a的值沒有被改變

至於為什麼a的值會是36?
因為你的a沒有經過賦值,所以a可能是任何值(a在記憶體中被分配到的位置原來的值)
這次執行是36,下一次再執行可能變成63
如果你在scanf前先把a的值印出來,你會發現a可能是任何值,但scanf失敗後a還是同一個值

要再說的深一點,global與static變數預設會自動初始為0,local變數不會,這是C的標準
而不同程式語言對於不同種類的變數,要不要自動初始為0,有不同的規定

driftice wrote:
要不要自動初始為0,有不同的規定...(恕刪)


沒有規定
所有變數在宣告時都應該給default initial value
這是不變的好習慣
特別是程式成千上萬行後特別重要
沒一個在回答問題,
排除int塞字元進去問題,
判斷式出現兩個結果,
照理來說a裡面的值應該只會觸發一個判斷,
卻跳出兩個了,
如果分別餵一次0和36答案是一樣的嗎?
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!