Eliran Turgeman
Eliran Turgeman

Reputation: 1656

How can I monitor user input with getchar

I need to get a user input and check if it is a valid input. The input must:

Clarification for number valid values:

So I wrote this basic code which simply gets the input but I have no clue on where to start on applying these conditions

    printf("Enter size of input:\n");
    int c;
    while((c=getchar())!='\n' && c!=EOF){
        printf("%c",c);
    }

For example :

Upvotes: 0

Views: 90

Answers (3)

bobthebuilder
bobthebuilder

Reputation: 184

Based on the problem statement you have given, i think this should give you your desired output

EDITED (After a few clarifications):

int main()
{
   int c;
   int i=0;
    while((c=getchar())!='\n' && c!=EOF)     
    {
       if(isdigit(c) || (char)c==' ')   //isdigit() function check if given variable is a digit
        {    printf("%c",c);   
             i+=1;
        }
       else
        {   
            break;
        }
    }
    if(i==0)
    {   printf("Invalid size"); }
}

Upvotes: -1

Jabberwocky
Jabberwocky

Reputation: 50831

You probably want something like this:

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

int main(int argc, char* argv[]) {
  printf("Enter size of input:\n");

  char input[100];
  fgets(input, sizeof input, stdin);

  if (!isdigit(input[0]))
  {
    printf("Invalid Size\n");
  }
  else
  {
    int inputsize = strtol(input, NULL, 10);
    printf("%d\n", inputsize);
  }
}

Upvotes: 0

kiran Biradar
kiran Biradar

Reputation: 12742

You can have state machine as below.

printf("Enter size of input:\n");
int c;
int state = 0; //0 = space, 1 = number, 2 = number read
int number = 0;
while((c=getchar())!='\n' && c!=EOF){
    switch(state)
    {
       case 0:
          if (isdigit(c))
            state = 1;
          else if (c == ' ')
            break;
          else
             //error
           break;

       case 1:
         if (isdigit(c))
         {
            number = number*10 + (c-'0');
            break;
         }
         else {
            state = 2;
         }

       case 2:
        printf ("%d\n",number);
    }
}

Upvotes: 2

Related Questions