-
Checking for letters
I'm writing a program that involves numbers and I want to make sure that what the user enters are numbers. Here is what I have so far but can't figure out how to do the check;
Code:
/*************
#include <stdio.h>
void main (void)
{
char name [20];
int numbers [5];
int average;
printf ("Please enter your name\n\n");
gets(name);
printf ("\n\nThank you %s, now enter 5 numbers pressing Enter after each\n\n", name);
scanf("%d%d%d%d%d", &numbers[0],&numbers[1],&numbers[2],&numbers[3],&numbers[4]);
average = (numbers[0] + numbers[1] + numbers[2] + numbers[3] + numbers[4]) / 5;
printf ("\n\n%s the average of those numbers is %d,\n\n", name, average);
printf ("\n\n%d%d%d%d%d\n\n", numbers[4], numbers[3], numbers[2], numbers[1], numbers[0]);
return ;
}
************/
I would really be thankful for any help.
Code tags added by Hammer
-
read the input into a char buffer and then loop through it, rejecting it if a non-digit is encountered.
-
>void main (void)
No, main returns an int and nothing else.
>gets(name);
This is okay only for student programs that will be thrown away shortly, otherwise it's just too unsafe to be worth it. Consider using fgets instead.
>I want to make sure that what the user enters are numbers.
In this case you can simply report an error if scanf fails. This ensures that the numbers you add together are well defined:
Code:
#include <stdio.h>
int main (void)
{
char name [20];
int numbers [5];
int average;
printf ("Please enter your name\n\n");
gets(name);
printf ("\n\nThank you %s, now enter 5 numbers pressing Enter after each\n\n", name);
if ( scanf("%d%d%d%d%d", &numbers[0],&numbers[1],&numbers[2],&numbers[3],&numbers[4]) == 5 ) {
average = (numbers[0] + numbers[1] + numbers[2] + numbers[3] + numbers[4]) / 5;
printf ("\n\n%s the average of those numbers is %d,\n\n", name, average);
printf ("\n\n%d%d%d%d%d\n\n", numbers[4], numbers[3], numbers[2], numbers[1], numbers[0]);
}
else
printf ("Only numbers please\n");
return 0;
}
-Prelude