I need to get user input for a number between 0 and 100. The problem is when i input letter in scanf the program crashes or recognizes it as a 0.I want to avoid any user mistake that would potentially crash my program.I used getch previously but i don't know how to get multiple digit numbers with it. Any help on how to solve this problem would be nice. Thank you.
do
{
printf("Enter ID: ");
scanf("%d", &NewWorkder->id);
TargetList= FillWorker();
TargetList= SeekList(Head, NewWorker->id);
}
while (NewWorker->id<0 || NewWorker->id>100 || (TargetList)!= (NULL) ||NewWorker->id ==0);
fprintf(filemechanic,"%s %s %d\n", NewWorker->name, NewWorker->surname, NewWorker->id);
free(TargetList);
fclose(filemechanic);
}
Don't use scanf
at all. Maybe you could use its return value to see if no digits were entered at all, but if you don't want an input like 12ab
to be valid, scanf
won't help.
Here's an example that uses fgets
and strtol
to check for a valid number:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char nptr[1024];
char *errptr;
long n = 0;
do
{
printf("Enter a base-10 number: ");
fgets(nptr, sizeof nptr, stdin);
n = strtol(nptr, &errptr, 10);
} while ((*errptr != '\n' && *errptr != '\0') || n < 0 || n > 100);
}
Example of running:
Enter a base-10 number: ab
Enter a base-10 number: 12ab
Enter a base-10 number: -1
Enter a base-10 number: 101
Enter a base-10 number: 123
Enter a base-10 number: 50
[end]