[問題] C++語法 isdigit

看板C_and_CPP (C/C++)作者 (allen)時間14年前 (2011/08/30 23:23), 編輯推噓7(7034)
留言41則, 10人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 問題(Question): isdigit該如何使用呢? 在http://www.cplusplus.com當中,是說 int isdigit ( int c ); 可是我實際使用,它卻只有處理字元。我在其他地方查到的也是說處理字元。 為什麼呢? 是cplusplus寫錯了嗎? 預期的正確結果(Expected Output): 0 4 錯誤結果(Wrong Output): 4 0 程式碼(Code):(請善用置底文網頁, 記得排版) #include <iostream> using namespace std; int main () { cout<<isdigit('3')<<endl; cout<<isdigit(3)<<endl; system("pause"); return 0; } 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.122.184.73 ※ 編輯: allenlinli 來自: 140.122.184.73 (08/30 23:24) ※ 編輯: allenlinli 來自: 140.122.184.73 (08/30 23:25)

08/30 23:26, , 1F
它判斷的是ASCII Code
08/30 23:26, 1F

08/30 23:26, , 2F
唔,這麼說好像怪怪的...
08/30 23:26, 2F

08/30 23:31, , 3F
沒差吧,char 能放的 int 都能放
08/30 23:31, 3F

08/30 23:34, , 4F
4和0很正常不是嗎...
08/30 23:34, 4F

08/30 23:50, , 5F
這有問題嗎??
08/30 23:50, 5F

08/30 23:51, , 6F
4 0 才對呀 不懂你的問題在哪
08/30 23:51, 6F

08/31 00:22, , 7F
你搞錯 isdigit 的意思了...
08/31 00:22, 7F

08/31 00:23, , 8F
所有在 <ctype.h> 裡的 is... 系列函式都是判斷某個字元
08/31 00:23, 8F

08/31 00:23, , 9F
'3' 當然是字元 所以判斷它是不是一個數字字元
08/31 00:23, 9F

08/31 00:24, , 10F
而 3 是一個數字 它到底是什麼字元是看 ASCII
08/31 00:24, 10F

08/31 01:00, , 11F
簡單的例子:http://pastie.org/2455317
08/31 01:00, 11F

08/31 01:18, , 12F
這函式的定義跟 ASCII 一點關係也沒有... C++ 有兩個
08/31 01:18, 12F

08/31 01:23, , 13F
isdigit 你用的是從 C 抄過來的 isdigit. C 的字元常數
08/31 01:23, 13F

08/31 01:24, , 14F
型態是 int 所以就這樣了。重複:不是所有電腦都用 ASCII
08/31 01:24, 14F

08/31 01:24, , 15F
我就知道提ASCII就一定會被F大或板主噹 XDD
08/31 01:24, 15F

08/31 03:16, , 16F
呃... 好啦我想這篇重點是為什麼是 int... lol
08/31 03:16, 16F

08/31 03:42, , 17F
其實我也不懂 int isdigit(char c); 哪裡不好?
08/31 03:42, 17F

08/31 03:48, , 18F
整數比較快吧,回傳一個真偽值都用到4 Bytes塞成BOOL了
08/31 03:48, 18F

08/31 08:23, , 19F
我個人妄加猜測原 po 想問既然吃字元為什麼寫 int,
08/31 08:23, 19F

08/31 08:24, , 20F
希望我的答案(C 的歷史遺跡)有回答到 xDDD
08/31 08:24, 20F

08/31 08:35, , 21F
版主OS:james732,想再當版標嘛.
08/31 08:35, 21F

08/31 08:43, , 22F
int isdigit ( int c ) 意思是說你傳遞一個char進去判斷
08/31 08:43, 22F

08/31 08:45, , 23F
是不是數字的字元,然後"是"就回傳4,"不是"救回傳0
08/31 08:45, 23F

08/31 08:47, , 24F
但是在gcc,是以0,1當回傳值.Favonia應該是傳寫跨平台的
08/31 08:47, 24F

08/31 08:48, , 25F
人,不然不會那麼注意未定義行為和跨平台的細節問題
08/31 08:48, 25F

08/31 14:57, , 26F
感謝各位大大 我從F大講的C歷史有比較懂一點^^
08/31 14:57, 26F

08/31 15:13, , 27F
我在cplusplus查到isdigit的確有C和C++的不同 而且在C
08/31 15:13, 27F

08/31 15:15, , 28F
當中 連isalphau也是int isalpha ( int c ); 所以F大講
08/31 15:15, 28F

08/31 15:15, , 29F
的沒錯
08/31 15:15, 29F

08/31 19:55, , 30F
假如用char 那EOF與255就有差....
08/31 19:55, 30F

08/31 19:55, , 31F
用int才會有差別
08/31 19:55, 31F

08/31 19:56, , 32F
假如用char 就沒辦法分別EOF 與255的值(更正樓上上)
08/31 19:56, 32F

08/31 20:41, , 33F
樓上講的是 C 標準一大罩門,實際上用 int 也不一定有差。
08/31 20:41, 33F

08/31 20:44, , 34F
EOF 雖然可以不是 -1 但 int 可能跟 char 一樣大,某些人
08/31 20:44, 34F

08/31 20:46, , 35F
想把 gcc 移植到某些機器上時就擔心過這問題 xD
08/31 20:46, 35F

08/31 21:28, , 36F
我以為是 char < short <= int <= long < long long..
08/31 21:28, 36F

08/31 21:39, , 37F
...厄,我把char c看成int c了.我的眼睛越來越糟糕
08/31 21:39, 37F

08/31 21:45, , 38F
沒有。是 signed char 的範圍被包括在 int 的範圍,但是
08/31 21:45, 38F

08/31 21:46, , 39F
UCHAR_MAX 可能比 INT_MAX 大... 然後就好玩了 xDDD
08/31 21:46, 39F

08/31 21:49, , 40F
上面打錯,應該說有些人用移植過去的 gcc 時就擔心過這個.
08/31 21:49, 40F

08/31 21:50, , 41F
我上次找到有人舉 Motorola 96002 DSP 上的 gcc 當例子
08/31 21:50, 41F
文章代碼(AID): #1ENG21mb (C_and_CPP)
文章代碼(AID): #1ENG21mb (C_and_CPP)