Search code examples
cstringintdigits

How to check if the entered character is a digit?


Given task is:

Enter 10 characters. For each character entered the corresponding function prints whether it is a digit 0-9 or not.(Also I use older compiler if anyone concerns about my "gets()" and goal is to do this without pointers.)

So far I tried something like this, but for some reason it does not work:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void){

    char character[10][1];
    char zero ='0';
    char nine ='9';
    int i;

    printf("Enter 10 characters:\n");

    for(i=0;i<10;i++){
        gets(character[i]);
    }

    for(i=0;i<10;i++){
        if(strcmp(character[i],zero)>=0 && strcmp(character[i],nine)<=0){
            printf("%d. character '%c' is a digit.", i, character[i]);
        }
        else{
            printf("%d. character '%c' is not a digit.", i, character[i]);
        }
        putchar('\n');
    }


    return 0;

} 

Also I tried this, but it can not output correctly characters:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void){

    char character[10][1], pom[10][1];
    int num_character[10];
    int i;

    printf("Enter 10 characters:\n");

    for(i=0;i<10;i++){
        gets(character[i]);
        strcpy(pom[i],character[i]);
        num_character[i]=atoi(character[i]);
    }

    for(i=0;i<10;i++){
        if(num_character[i]!=0){
            printf("Character '%c' is digit.", pom[i]);
        }
        else{
            printf("Character '%c' is not digit.", pom[i]);
        }
        putchar('\n');
    }

    return 0;

}

isdigit() also does not work after I include ctype header.


Solution

  • You are doing several things wrong here, gets is never recommended and fgets will put new line character in the end.

    The syntax for strcmp is:

    int strcmp(const char *s1, const char *s2);
    

    You need two strings as input in strcmp but you are using a string and a character.

    Here, it is better to use a character array than a 2D array.

       #include <stdio.h>
    
        int main(void)
        {
    
                char character[10];       //a simple character array
                char zero ='0';
                char nine ='9';
                int i;
    
                printf("Enter 10 characters:\n");
    
                for(i=0;i<10;i++){
                        scanf(" %c", &character[i]);     //scan characters
                }
                for(i=0;i<10;i++)
                {
                        if(character[i] >= zero && character[i] <= nine)      //print
                                printf("%d. %c is a digit \n", i+1, character[i]);    
                        else
                                printf("%d. %c is not a digit \n", i+1, character[i]);
                }
                }