Skip to main content

C Program To Manage Unusual User Input.

A program can show incorrect output when the input is not validated to see whether it is correct or not. The best way of avoiding such situation is that treat all input as a sequence of characters, and then perform the necessary data conversion. We can use getchar() to read all input as a string, and afterward convert the string to the correct data type.

#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
#define MAXBUFFERSIZE 80

void cleartoendofline(void);          /* ANSI function prototype */
void cleartoendofline(void)
{
char ch;
ch = getchar();
while(ch != '\n')
ch = getchar();
}


main() {
char ch;                                   /* handles user input */
char buffer[MAXBUFFERSIZE];  /* sufficient to handle one line */
int char_count;                         /* number of characters read for this line */
int exit_flag = 0, number, valid_choice;

while( exit_flag  == 0 ) {
valid_choice = 0;

while( valid_choice == 0 ) {
printf("\n\nEnter a number between 1 and 1000: ");
ch = getchar();
char_count = 0;

while((ch != '\n') && (char_count < MAXBUFFERSIZE)) {
buffer[char_count++] = ch;
ch = getchar();
}

buffer[char_count] = 0x00;      /* null terminate buffer */
number = atoi(buffer);

if((number < 1) || (number > 1000))
printf("\n\tWrong Input?");
else
valid_choice = 1;
}

printf("\n\nThe number you entered was: ");
printf("%d\n", number);

valid_choice = 0;
while( valid_choice == 0 ) {

printf("\n\nDo You Want To Continue? (Y/N): ");
scanf("%c", &ch );
ch = toupper( ch );

if((ch == 'Y') || (ch == 'N'))
valid_choice = 1;

else
printf("\n\nError: Invalid Choice\n");
cleartoendofline();
}
if( ch == 'N' ) exit_flag = 1;
}}