[C/C++] 判斷字串是否為數字
Mar 1st, 2008 by appleboy 參觀者:10,887Views 機器人:1,002Views
常常在寫 C 語言,有時候想判斷輸入的是否為數字,如果不是的話,要重新輸入,所以寫一下怎麼判斷的,ptt提供了下面很多函式
isalnum ctype.h 測試某一整數值是否為’A'-’Z',’a'-’z',’0′-’9′等文數字之一。
isalpha ctype.h 測試某一整數值是否為’A'-’Z',’a'-’z',等字母之一。
isascii ctype.h 如果ch的值判於0-127,則傳回非零整數(0×00-0×7F)。
iscntrl ctype.h 如果ch是一刪除字元或一般控制字元,則傳回非零整數(0×7F或0×00-0×1F)。
isdigit ctype.h 如果ch是一數字,則傳回非零整數。
isgraph ctype.h 如果ch是為可列印字元,則傳回非零整數。
islower ctype.h ch若為小寫字母,則傳回非零整數。
isprint ctype.h ch若為可列印字元,則傳回非零整數。其功能與isgraph相似。
ispunct ctype.h ch若為標點符號,則傳回非零整數。
isspace ctype.h ch若為空白字元或定位字元(Tab),歸位字元(Enter鍵),新列字元,垂直定位字元,換頁字元,則傳回非零整數。
isupper ctype.h ch若為大寫字母,則傳回非零整數。
isxdigit ctype.h ch若為一個十六進位數字,則傳回非零整數
用程式去判斷會更快,因為上面的函式,都是要單一字元去檢查,非常不方便,所以就寫了底下的程式
char year[20];
int as, check_ascii, check_ascii_bool;
printf("請輸入您要查詢的年份『輸入exit離開』: ");
while(fgets(year, sizeof(year), stdin))
{
if ((p = strchr(year, '\n')) != NULL)
*p = '\0';
if(!strcmp("exit", year))
{
break;
}
do
{
check_ascii_bool = 1;
for(as=0;year[as]!='\0';as++)
{
check_ascii = year[as];
if( (check_ascii < 48) || (check_ascii > 57) )
{
check_ascii_bool = 0;
}
}
if(check_ascii_bool == 0)
{
printf("輸入錯誤,請重新輸入\n");
printf("請輸入您要查詢的年份『輸入exit離開』: ");
fgets(year, sizeof(year), stdin);
if ((p = strchr(year, '\n')) != NULL)
*p = '\0';
if(!strcmp("exit", year))
{
exit(0);
}
}
}
while(check_ascii_bool == 0);
printf("請輸入您要查詢的年份『輸入exit離開』: ");
}

我想問一下如果輸入的字串為浮點數,又該怎麼判別呢?