2010-05-11 139 views
2

我需要兩個命令isdigit()isalpha()如何工作的簡要說明。當然,我在提問之前先閱讀了在線資源,但我嘗試了這些資源,無法讓它們工作。使用它們的最簡單方法是什麼?使用isdigit()和isalpha()命令最簡單的方法是什麼?

我知道這還給一個值,所以我假設我可以這樣使用它:

if(isdigit(someinput)==1) 
return -1; 

是正確的嗎?我可以將它用於任何類型的角色嗎?我可以將它與浮點數或數組進行比較嗎?

假設我想掃描一個包含數字和字母的文本文件,並確定要掃描的內容。這兩個命令可以在這種情況下使用嗎?

回答

1

它們不是「命令」,它們是功能。函數接受參數並返回值。

#include <ctype.h> 
int isdigit(int ch); 

這是isdigit函數簽名:它表示它將接受int值(或東西,可以轉換爲int,像char),它會返回一個int。因此,您不能將它傳遞給一個數組(儘管您可以在int[]的每個成員上調用它)。

isalpha的簽名是相同的(顯然名稱除外)。

文檔說以下內容:

描述:該函數因而isalpha() 返回非零值,如果它的參數是字母表中的 信。否則, 返回零。

這意味着您的比較對於所有實現都是不正確的。更好的做這樣的事情:

if (isdigit(someinput)) { 
return -1; 
} 

在C,0將計算爲false在布爾表達式,並且所有非零值評估爲true。因此,此檢查將涵蓋返回-1,5的任何isdigit的實現。

如果要將這些應用於文本文件中的值,則必須一次讀取文本中的一個字符,並將接收到的字符傳遞給這些方法。

+0

謝謝!所以我只能用它來比較一個字符? – NLed 2010-05-11 20:47:53

+0

這個函數的一個調用將需要一個字符,但是當然你可以根據需要重複。 – danben 2010-05-11 21:25:04

+0

感謝您的回覆,最後的一個offtopic問題...什麼是將角色轉換爲數字的方法? – NLed 2010-05-11 21:54:04

0

您可以使用它任何字符類型! (其實它是int,我不知道這是出於兼容性原因還是什麼,但最常見的用法是用於字符)

它將確定例如'5'是數字還是字母數字(部分字母表)。是的,你的用法是正確的,如果someInput的類型是「字符」

+0

感謝您的回覆:) – NLed 2010-05-11 21:01:36

+0

嘿,沒問題!這就是我在這裏! – LukeN 2010-05-11 21:20:18

+1

'isxxx()'函數被定義爲接受一個'int',並且可以傳遞'getchar()','getc()'和'fgetc()'返回的所有值,即所有類型爲'unsigned char'加上特殊值'EOF',而沒有其他。 – chqrlie 2017-01-12 12:32:44

2

你做通常要比較的返回值,只把它當作一個布爾值:

if (isalpha(someinput)) 
    do_whatever(); 

如果硬要做一個比較,它需要是!=0,但它是完全多餘和毫無意義的。

您在字符上使用它已經從輸入中讀取,這些字符不是(當時)浮動或任何東西,只是字符組。在浮動的情況下,其中一些將是數字,但是許多還將包括小數點(不是數字),並且可能偶爾還包括e,+-

另請注意,在調用任何is*函數之前,通常需要將輸入投射到unsigned char。當許多字符集被視爲signed char時,會將某些字符視爲負數,並將負值傳遞給其中的任何字符會導致未定義的行爲。

+0

如果掃描的輸入是稍後將用於計算的數字,該怎麼辦? – NLed 2010-05-11 20:54:10

+0

@ZaZu:如果你已經將某些東西轉換爲數字,那麼'isdigit'或'isalpha'就不再有任何實際用途 - 它現在是一個數字,而不是數字或字母字符。 – 2010-05-11 21:10:14

+0

如何將char轉換爲數字? – NLed 2010-05-11 21:13:15

相關問題