I want to create a simple menu in C program that accepts single character. The menu will be like this:
- [S]how
- [E]xit
If the user enter ‘1’,’s’ or ‘S’ the program will print “Hello” and prompt again for the input
else if the user enters ‘2’,E or ‘E’ the program ends.
else it should print “invalid input” and prompt again.
I am able to create the program but the problem is that when user enters 12, 13, 14, 15, 16…..so on starting with 1, it shows Hello and same for other options.
My code is:
#include <stdio.h>
void clearBuffer();
int main() {
int i = 0;
char selection;
do
{
printf("\t1. [S]how\n");
printf("\t2. [E]xit\n");
printf("Enter your selection from the number or character noted above: ");
scanf("%s", &selection);
clearBuffer();
if (selection == '1' || selection == 's' || selection == 'S')
printf("Hello");
else if (selection == '2' || selection == 'E' || selection == 'x')
i = 0;
} while(i != 0);
}
void clearBuffer()
{
while(getchar() != '\n');
}
You could use strlen, which is part of the standard C library, to check the length of the string returned by scanf and reject entries longer than one character:
Alternatively, I think you could use getchar() to accept just a single character from the user, which means they wouldn’t have to press enter.