作者allenlinli (allen)
看板C_and_CPP
標題[問題] C++的isdigit
時間Tue Aug 30 23:23:42 2011
開發平台(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)
→ james732:它判斷的是ASCII Code 08/30 23:26
→ james732:唔,這麼說好像怪怪的... 08/30 23:26
推 purpose:沒差吧,char 能放的 int 都能放 08/30 23:31
→ PkmX:4和0很正常不是嗎... 08/30 23:34
推 stonehomelaa:這有問題嗎?? 08/30 23:50
→ stonehomelaa:4 0 才對呀 不懂你的問題在哪 08/30 23:51
推 LPH66:你搞錯 isdigit 的意思了... 08/31 00:22
→ LPH66:所有在 <ctype.h> 裡的 is... 系列函式都是判斷某個字元 08/31 00:23
→ LPH66:'3' 當然是字元 所以判斷它是不是一個數字字元 08/31 00:23
→ LPH66:而 3 是一個數字 它到底是什麼字元是看 ASCII 08/31 00:24
推 Favonia:這函式的定義跟 ASCII 一點關係也沒有... C++ 有兩個 08/31 01:18
→ Favonia:isdigit 你用的是從 C 抄過來的 isdigit. C 的字元常數 08/31 01:23
→ Favonia:型態是 int 所以就這樣了。重複:不是所有電腦都用 ASCII 08/31 01:24
→ james732:我就知道提ASCII就一定會被F大或板主噹 XDD 08/31 01:24
推 Favonia:呃... 好啦我想這篇重點是為什麼是 int... lol 08/31 03:16
→ james732:其實我也不懂 int isdigit(char c); 哪裡不好? 08/31 03:42
推 purpose:整數比較快吧,回傳一個真偽值都用到4 Bytes塞成BOOL了 08/31 03:48
→ Favonia:我個人妄加猜測原 po 想問既然吃字元為什麼寫 int, 08/31 08:23
→ Favonia:希望我的答案(C 的歷史遺跡)有回答到 xDDD 08/31 08:24
→ angleevil:版主OS:james732,想再當版標嘛. 08/31 08:35
→ angleevil:int isdigit ( int c ) 意思是說你傳遞一個char進去判斷 08/31 08:43
→ angleevil:是不是數字的字元,然後"是"就回傳4,"不是"救回傳0 08/31 08:45
→ angleevil:但是在gcc,是以0,1當回傳值.Favonia應該是傳寫跨平台的 08/31 08:47
→ angleevil:人,不然不會那麼注意未定義行為和跨平台的細節問題 08/31 08:48
→ allenlinli:感謝各位大大 我從F大講的C歷史有比較懂一點^^ 08/31 14:57
→ allenlinli:我在cplusplus查到isdigit的確有C和C++的不同 而且在C 08/31 15:13
→ allenlinli:當中 連isalphau也是int isalpha ( int c ); 所以F大講 08/31 15:15
→ allenlinli:的沒錯 08/31 15:15
→ firejox:假如用char 那EOF與255就有差.... 08/31 19:55
→ firejox:用int才會有差別 08/31 19:55
→ firejox:假如用char 就沒辦法分別EOF 與255的值(更正樓上上) 08/31 19:56
→ Favonia:樓上講的是 C 標準一大罩門,實際上用 int 也不一定有差。 08/31 20:41
→ Favonia:EOF 雖然可以不是 -1 但 int 可能跟 char 一樣大,某些人 08/31 20:44
→ Favonia:想把 gcc 移植到某些機器上時就擔心過這問題 xD 08/31 20:46
→ tropical72:我以為是 char < short <= int <= long < long long.. 08/31 21:28
→ angleevil:...厄,我把char c看成int c了.我的眼睛越來越糟糕 08/31 21:39
→ Favonia:沒有。是 signed char 的範圍被包括在 int 的範圍,但是 08/31 21:45
→ Favonia:UCHAR_MAX 可能比 INT_MAX 大... 然後就好玩了 xDDD 08/31 21:46
→ Favonia:上面打錯,應該說有些人用移植過去的 gcc 時就擔心過這個. 08/31 21:49
→ Favonia:我上次找到有人舉 Motorola 96002 DSP 上的 gcc 當例子 08/31 21:50