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;
}}