[C/C++] 判斷字串是否為數字

常常在寫 C 語言,有時候想判斷輸入的是否為數字,如果不是的話,要重新輸入,所以寫一下怎麼判斷的,ptt提供了下面很多函式

isalnum ctype.h 測試某一整數值是否為’A’-‘Z’,’a’-‘z’,’0′-‘9’等文數字之一。 isalpha ctype.h 測試某一整數值是否為’A’-‘Z’,’a’-‘z’,等字母之一。 isascii ctype.h 如果ch的值判於0-127,則傳回非零整數(0x00-0x7F)。 iscntrl ctype.h 如果ch是一刪除字元或一般控制字元,則傳回非零整數(0x7F或0x00-0x1F)。 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若為一個十六進位數字,則傳回非零整數 用程式去判斷會更快,因為上面的函式,都是要單一字元去檢查,非常不方便,所以就寫了底下的程式

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

char *p;  
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離開』: ");
  }

See also