how to check if the input is a number or not in C?

前端 未结 8 1992
暖寄归人
暖寄归人 2020-11-27 05:38

In the main function of C:

void main(int argc, char **argv)
{
   // do something here
}

In the command line, we will type any number for ex

相关标签:
8条回答
  • 2020-11-27 06:09

    A self-made solution:

    bool isNumeric(const char *str) 
    {
        while(*str != '\0')
        {
            if(*str < '0' || *str > '9')
                return false;
            str++;
        }
        return true;
    }
    

    Note that this solution should not be used in production-code, because it has severe limitations. But I like it for understanding C-Strings and ASCII.

    0 讨论(0)
  • 2020-11-27 06:13

    The sscanf() solution is better in terms of code lines. My answer here is a user-build function that does almost the same as sscanf(). Stores the converted number in a pointer and returns a value called "val". If val comes out as zero, then the input is in unsupported format, hence conversion failed. Hence, use the pointer value only when val is non-zero.

    It works only if the input is in base-10 form.

    #include <stdio.h>
    #include <string.h>
    int CONVERT_3(double* Amt){
    
        char number[100];
    
        // Input the Data
        printf("\nPlease enter the amount (integer only)...");
        fgets(number,sizeof(number),stdin);
    
        // Detection-Conversion begins
        int iters = strlen(number)-2;
        int val = 1;
        int pos;
        double Amount = 0;
        *Amt = 0;
        for(int i = 0 ; i <= iters ; i++ ){
            switch(i){
                case 0:
                    if(number[i]=='+'){break;}
                    if(number[i]=='-'){val = 2; break;}
                    if(number[i]=='.'){val = val + 10; pos = 0; break;}
                    if(number[i]=='0'){Amount = 0; break;}
                    if(number[i]=='1'){Amount = 1; break;}
                    if(number[i]=='2'){Amount = 2; break;}
                    if(number[i]=='3'){Amount = 3; break;}
                    if(number[i]=='4'){Amount = 4; break;}
                    if(number[i]=='5'){Amount = 5; break;}
                    if(number[i]=='6'){Amount = 6; break;}
                    if(number[i]=='7'){Amount = 7; break;}
                    if(number[i]=='8'){Amount = 8; break;}
                    if(number[i]=='9'){Amount = 9; break;}
                default:
                    switch(number[i]){
                        case '.':
                            val = val + 10;
                            pos = i;
                            break;
                        case '0':
                            Amount = (Amount)*10;
                            break;
                        case '1':
                            Amount = (Amount)*10 + 1;
                            break;
                        case '2':
                            Amount = (Amount)*10 + 2;
                            break;
                        case '3':
                            Amount = (Amount)*10 + 3;
                            break;
                        case '4':
                            Amount = (Amount)*10 + 4;
                            break;
                        case '5':
                            Amount = (Amount)*10 + 5;
                            break;
                        case '6':
                            Amount = (Amount)*10 + 6;
                            break;
                        case '7':
                            Amount = (Amount)*10 + 7;
                            break;
                        case '8':
                            Amount = (Amount)*10 + 8;
                            break;
                        case '9':
                            Amount = (Amount)*10 + 9;
                            break;
                        default:
                            val = 0;
                    }
            }
            if( (!val) | (val>20) ){val = 0; break;}// val == 0
        }
    
        if(val==1){*Amt = Amount;}
        if(val==2){*Amt = 0 - Amount;}
        if(val==11){
            int exp = iters - pos;
            long den = 1;
            for( ; exp-- ; ){
                den = den*10;
            }
            *Amt = Amount/den;
        }
        if(val==12){
            int exp = iters - pos;
            long den = 1;
            for( ; exp-- ; ){
                den = den*10;
            }
            *Amt = 0 - (Amount/den);
        }
    
        return val;
    }
    
    
    int main(void) {
        double AM = 0;
        int c = CONVERT_3(&AM);
        printf("\n\n%d    %lf\n",c,AM);
    
        return(0);
    }
    
    0 讨论(0)
提交回复
热议问题